cstdio stdio.h命名空间 我从C++引用中看到这条线,用于 CSTDIO < /C> >:
库的每个元素都在cstdio stdio.h命名空间 我从C++引用中看到这条线,用于 CSTDIO < /C> >:,c++,header,C++,Header,库的每个元素都在std名称空间中定义 但我试过密码: std::printf("hello world"); printf("hello world"); C++头是否将名称同时放在std和全局命名空间中?包括cstdio将符号名称导入std命名空间,可能还会导入全局命名空间中。 includestdio.h导入全局命名空间中的符号名称,可能还会导入std命名空间中的符号名称 这同样适用于所有c样式的头 参考: C++11标准 附录D(规范性)兼容性特征[depr]规定: D.6 C标准
std名称空间中定义
但我试过密码:
std::printf("hello world");
printf("hello world");
C++头是否将名称同时放在std和全局命名空间中?包括
cstdio
将符号名称导入std
命名空间,可能还会导入全局命名空间中。include
stdio.h
导入全局命名空间中的符号名称,可能还会导入std
命名空间中的符号名称
这同样适用于所有c样式的头
参考:
C++11标准 附录D(规范性)兼容性特征[depr]规定: D.6 C标准库标题 <> 1,与C标准库和C Unicode TR兼容,C++标准库提供25个C标题,如表151所示。 其中包括:
进一步说,
2每个C头(每个C头都有一个name.h
格式的名称)的行为就好像由相应的cname头
放置在标准库名称空间中的每个名称都被放置在全局名称空间范围内一样。这些名称是否首先在名称空间范围内声明或定义尚不明确(3.3.6),然后通过显式使用声明(7.3.3)将其注入全局命名空间范围
三,[示例:标题
确实在名称空间std中提供了其声明和定义。它也可以在全局名称空间中提供这些名称。标题
确实在全局名称空间中提供了与C标准中相同的声明和定义。它还可以为这些名称提供在名称空间std.-end示例中]
根据libstdc++文档: 该标准规定,如果其中包含C样式标题 (
在本例中),符号将在全局中可用
名称空间,可能在名称空间std::(但这不再是一家公司
另一方面,包括C++风格的标题
(
)保证实体将在命名空间std中找到
也许在全局名称空间中
所以这取决于实现?有趣的是,我不知道。@MrLister:是的,标准对此没有任何混淆。我是否正确地认为我应该包括,并且“stdio.h”是“不推荐的”?@javapowered,是的。自C++11以来,C兼容性头已经在本标准的“兼容性特征”附件,描述了“不推荐的特征,其中不推荐的定义为:本国际标准当前版本的规范性特征,但已被确定为从未来版本中删除的候选特征”。将其标记为“确定为删除的候选特征”“但可以说是有悖常理的。认为头将永远保留,并且应该是不预先确定的。我认为如果我们使用
,那么它将保证实体将在名称空间std
下可用,因此不在全局名称空间中。