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