- Откуда
size_t, когда у меня ничего нет? - Можно ли всегда предполагать
size_t==std::size_t? - Когда следует использовать контейнеры
size_typeinstd(string::size_type,vector<T>::size_typeи т.д.)?
Std:: size_t vs size_t vs std::string:: size_type
Ответ 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.