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

Std:: size_t vs size_t vs std::string:: size_type

  • Откуда size_t, когда у меня ничего нет?
  • Можно ли всегда предполагать size_t == std::size_t?
  • Когда следует использовать контейнеры size_type in std (string::size_type, vector<T>::size_type и т.д.)?
4b9b3361

Ответ 1

Откуда возникает size_t, когда у меня нет ничего в пустом проекте?

Если у вас ничего нет, вы не можете использовать size_t. Он определен в <stddef.h> (и, возможно, также в <cstddef>, если ваша версия этого заголовка помещает определения в глобальное пространство имен, а также std).

Можно ли всегда предполагать size_t == std:: size_t?

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

Когда мне следует использовать std:: _:: size_type?

Вы имеете в виду типы size_type, определенные в некоторых стандартных классах и шаблонах, таких как vector? Вы можете использовать их при использовании этих классов, если хотите. В большинстве случаев вы будете знать, что это то же самое, что и size_t, поэтому вы можете использовать это и сохранить немного ввода. Если вы пишете общий код, где вы не знаете, что такое класс, тогда лучше использовать size_type, если он не совместим с size_t.

Например, вы можете написать контейнер, предназначенный для хранения большего количества элементов, чем может быть представлен size_t. Вы можете использовать какой-то большой тип номера для представления размера контейнера, который не конвертируется в size_t. В этом случае код типа size_t s = c.size() не сможет скомпилироваться - вместо этого вам нужно будет использовать Container::size_type.

Ответ 2

Откуда size_t, когда у меня нет ничего в пустом проекте?

size_t - это базовый беззнаковый целочисленный memsize-тип, определенный в стандартной библиотеке языков C/С++. Он определен в "stddef.h" для C и в <cstddef> для C++.

Типы, определяемые файлом заголовка "stddef.h", расположены в глобальном пространстве имен, а заголовок <cstddef> помещает тип size_t в пространство имен std.

"stddef.h" из C включен в С++ для совместимости, и, следовательно, этот тип можно найти как в глобальном пространстве имен (::size_t), так и в пространстве имен std (std::size_t).

Ответ 3

size_t определяется в <cstddef> и находится в пространстве имен std.