当前位置:  开发笔记 > 编程语言 > 正文

"std :: size_t"在C++中有意义吗?

如何解决《"std::size_t"在C++中有意义吗?》经验,为你挑选了3个好方法。

在一些代码,我继承,我看到经常使用size_tstd命名空间限定词.例如:

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.



1> Johannes Sch..:

对于这种情况,stackoverflow人群之间似乎存在混淆

::size_t在向后兼容标头中定义stddef.h.它一直的一部分,ANSI/ISO C并且ISO C++因为其本身的开始.每个C++实现都必须附带stddef.h(兼容性)cstddef,只有后者定义std::size_t,而不一定::size_t.参见C++标准的附录D.


绝对是这里最好的答案.它基于标准而不是特定的编译器.它回答了原始问题而没有偏离切线.
不使用`using namespace std`的另一个原因

2> Don Wakefiel..:

C++标准第17.4.1.2节第4段规定:

"但是,在C++标准库中,声明和定义(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.5)内."

这包括在模式cname的头文件中找到的项目,包括定义size_t的cstddef.

所以std :: size_t实际上是正确的.



3> fizzer..:

size_t例如,您可以通过包含代替而来获取全局命名空间.我看不到任何明显的好处,并且该功能已被弃用.


除了我认为@fizzer正在解释你如何*最终在你的C++程序中以全局命名空间结束size_t,而不是建议你*做*.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有