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, FILE, fpos_t, lconv, ldiv_t, mbstate_t, ptrdiff_t, sig_atomic_t, size_t, time_t, tm, 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.
Comments