Разница между размером t и std:: размер t
каковы различия между size_t
и std::size_t
С точки зрения того, где они объявлены, когда они должны быть использованы и любые другие отличительные особенности?
3 ответов
С size_t
и C++'ы std::size_t
а как же.
в C это определено в <stddef.h>
и в C++, его определили в <cstddef>
содержимое которого совпадает с заголовком C (см. цитату ниже). Его определяют как целочисленный тип без знака на результат на sizeof оператора.
стандарт C говорит в §17.7/2,
реализация которой является целочисленный тип без знака из результат на sizeof оператор
и стандарт C++ говорит (о cstddef
заголовок) в §18.1/3,
содержимое совпадает со стандартным заголовком библиотеки C,со следующими изменениями.
так что да, одинаковы; единственная разница в том, что C++ определяет size_t
на std
пространство имен.
Пожалуйста, обратите внимание, что в приведенной выше строке также говорится "со следующими изменениями" что не относится к size_t
. Это скорее относится к новым добавлениям (в основном), сделанным C++ в язык (не присутствует в C), которые также определены в том же заголовке.
Википедия имеет очень хорошую информацию о диапазоне и размере хранения size_t:
диапазон и размер хранилища size_t
The фактический тип size_t-это ; a распространенная ошибка предполагается, что size_t совпадает с unsigned int, который может привести к ошибки программирования,[3][4] при движении от 32 до 64-разрядной архитектуры, для образец.
согласно ISO c 1999 standard (C99), size_t является беззнаковым целочисленный тип не менее 16 бит.
а остальное вы можете узнать от на этой странице в Википедии.
Из C++03 "17.4.3.1.4 Типы":
для каждого типа T из стандартной библиотеки C (сноска 169) типы ::T и std::T зарезервированы для реализации и, когда они определены,:: T должны быть идентичны std::T.
и сноска 169:
эти типы clock_t данных div_t, файл, fpos_t, lconv, ldiv_t, mbstate_t, типы ptrdiff_t, sig_atomic_t, реализация, время, ТМ, va_list, wctrans_t, wctype_t, и wint_t.
std:: size_t на самом деле stddef.h ' s реализация.
cstddef дает следующее:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}
...эффективное приведение предыдущего определения в пространство имен std.