Подтвердить что ты не робот

Разница между size_t и std:: size_t

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

4b9b3361

Ответ 1

C size_t и С++ std::size_t совпадают.

В C он определен в <stddef.h> и в С++, определенный в <cstddef>, содержимое которого совпадает с содержимым C (см. цитату ниже). Его определяют как беззнаковый целочисленный тип результата оператора sizeof.

C Стандарт говорит в §17.7/2,

size_t, который является беззнаковым целым типом результата оператора sizeof

И в С++ Standard говорится (о заголовке cstddef) в §18.1/3,

Содержимое совпадает с заголовком библиотеки Standard C со следующими изменениями.

Итак, да, оба одинаковы; Единственное отличие состоит в том, что С++ определяет size_t в пространстве имен std.

Также обратите внимание, что приведенная выше строка также говорит "со следующими изменениями", которая не относится к size_t. Это скорее относится к новым дополнениям (в основном), сделанным С++, в язык (не представленный в C), которые также определены в одном заголовке.


Википедия имеет очень хорошую информацию о диапазоне и размере памяти size_t:

Диапазон и размер хранилища size_t

Тип фактический size_t зависит от платформы; распространенная ошибказаключается в том, чтобы size_t был таким же, как unsigned int, что может привести к ошибки программирования [3] [4] при перемещении от 32 до 64-битной архитектуры, для Пример.

Согласно ИСО 1999 года стандарт (C99), size_t является неподписанным целочисленный тип не менее 16 бит.

И остальное вы можете прочитать эту страницу в википедии.

Ответ 2

Из С++ 03 "17.4.3.1.4 Типы":

Для каждого типа T из библиотеки Standard 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.

Ответ 3

std:: size_t на самом деле stddef.h size_t.

cstddef дает следующее:

#include <stddef.h>
namespace std 
{
  using ::ptrdiff_t;
  using ::size_t;
}

... эффективно приведение предыдущего определения в пространство имен std.