相关疑难解决方法(0)

我应该为size_t包含stddef.h或cstddef

当我想size_t在C++中使用时,我应该包含<stddef.h>还是<cstddef>?我听过几个人说这<cstddef>是个坏主意,应该弃用.这是为什么?

c++ namespaces naming-conventions size-t header-files

24
推荐指数
3
解决办法
1万
查看次数

在<c ____>标题中声明的C函数是否保证在全局名称空间和std中?

所以这是我一直想知道但却从未确定过的事情.所以这完全是好奇心问题,而不是真正的问题.

据我所知,当你#include <cstdlib>std::命名空间中声明所有事情(当然除了宏)之外.我见过的每个实现都是通过执行以下操作来实现的:

#include <stdlib.h>
namespace std {
    using ::abort;
    // etc....
}
Run Code Online (Sandbox Code Playgroud)

这当然会影响全局命名空间和std.这种行为有保证吗?或者实现是否可能将这些内容放入std全局命名空间中而不是放在全局命名空间中?我能想到的唯一办法做到这一点是有你的libstdc ++实现每一个C函数本身将它们放置在std直接而不只是包括现有的libc头文件(因为没有机制来移除命名空间的东西).这当然是很多努力,几乎没有任何好处.

我的问题的实质是,以下程序是否严格符合并保证有效?

#include <cstdio>
int main() {
    ::printf("hello world\n");
}
Run Code Online (Sandbox Code Playgroud)

编辑:我发现的最接近的是这个(17.4.1.2p4):

除了如条款18至27所指出的,每一个报头的CNAME的内容应是相同于相应的头name.h的,如在ISO指定/ IEC 9899:1990编程语言C(第7章),或ISO/IEC :1990编程语言-C修正案1:C完整性,(第7条),酌情包括在内.但是,在C++标准库中,声明和定义(在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.5)内.

说实话,我可以解释任何一种方式."每头CNAME的内容应当相同相应的头name.h的,符合ISO/IEC 9899:1990编程语言C"告诉我,他们可以在全局命名空间是必需的,但"在但是,C++标准库,声明和定义(在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.5)内.说他们在std(但没有指明他们所在的任何其他范围).

c c++ namespaces

16
推荐指数
1
解决办法
707
查看次数

标签 统计

c++ ×2

namespaces ×2

c ×1

header-files ×1

naming-conventions ×1

size-t ×1