在一些代码,我继承,我看到经常使用size_t
与std
命名空间限定词.例如:
std::size_t n = sizeof( long );
当然,它编译并运行良好.但对我来说这似乎是不好的做法(也许是从C继承下来的?).
是不是真的size_t
是内置到C++中,因此在全局命名空间中?是否需要size_t
在C++中使用头文件?
提出这个问题的另一种方法是,是否需要在所有C++编译器上编译以下程序(没有包含)?
size_t foo() { return sizeof( long ); }
Johannes Sch.. 130
对于这种情况,stackoverflow人群之间似乎存在混淆
::size_t
在向后兼容标头中定义stddef.h
.它一直的一部分,ANSI/ISO C
并且ISO C++
因为其本身的开始.每个C++实现都必须附带stddef.h
(兼容性)cstddef
,只有后者定义std::size_t
,而不一定::size_t
.参见C++标准的附录D.
对于这种情况,stackoverflow人群之间似乎存在混淆
::size_t
在向后兼容标头中定义stddef.h
.它一直的一部分,ANSI/ISO C
并且ISO C++
因为其本身的开始.每个C++实现都必须附带stddef.h
(兼容性)cstddef
,只有后者定义std::size_t
,而不一定::size_t
.参见C++标准的附录D.
C++标准第17.4.1.2节第4段规定:
"但是,在C++标准库中,声明和定义(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.5)内."
这包括在模式cname的头文件中找到的项目,包括定义size_t的cstddef.
所以std :: size_t实际上是正确的.
size_t
例如,您可以通过包含
代替而来获取全局命名空间
.我看不到任何明显的好处,并且该功能已被弃用.