Разница между размером t и std:: размер t



в чем разница между size_t и std::size_t С точки зрения того, где они объявлены, когда они должны быть использованы и любые другие отличительные особенности?

575   3  

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

    Ничего не найдено.