size_t
来自哪里?size_t
== std::size_t
?size_type
容器中的std
(string::size_type
,vector<T>::size_type
等)?答案 0 :(得分:10)
当我没有在空项目中包含任何内容时,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
代替。
答案 1 :(得分:1)
如果空项目中没有任何内容,size_t
来自哪里?
size_t
是在C / C ++语言的标准库中定义的基本无符号整数memsize类型。它在"stddef.h"
C
和<cstddef>
C++
中定义。
头文件"stddef.h"
定义的类型位于全局命名空间中,而<cstddef>
标头将size_t
类型放在命名空间std
中。
"stddef.h"
包含在C ++中以实现兼容性,因此可以在全局命名空间(::size_t
)和std
命名空间(std::size_t
中找到该类型)。
答案 2 :(得分:0)
size_t
在<cstddef>
中定义,位于std
名称空间中。