cstdio stdio.h命名空间

我从cstdio的c ++参考中看到这一行:

库中的每个元素都在std namespace定义。 但我试过的代码:

 std::printf("hello world"); printf("hello world"); 

C ++头文件是否将名称放在std和全局名称空间中是真的吗?

包括cstdiostd命名空间和可能的Global命名空间中导入符号名称。
包括stdio.h在全局命名空间和可能std命名空间中导入符号名称。

所有c风格的标题也是如此。


参考:
C ++ 11标准

附录D(规范性)兼容性function[depr]状态:

D.6 C标准库头

1为了与C标准库和C Unicode TR兼容,C ++标准库提供了25 C头文件,如表151所示。

其中包括:

<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h> <complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h> <ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h> <errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h> <fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>

进一步,

2 每个C头都有一个name.hforms的name.h ,就像每个名字放在标准库名字空间中的相应的cname header ,放在全局名字空间的范围内。 没有指定这些名称是首先在名称空间std的名称空间作用域(3.3.6)中声明还是定义的,然后通过显式使用声明(7.3.3)将其注入到全局名称空间作用域中。

3 [示例:头文件<cstdlib>确实在命名空间std中提供了它的声明和定义。 它也可能在全局命名空间中提供这些名字。 头文件<stdlib.h>确实在全局命名空间中提供了相同的声明和定义,就像C标准一样。 它也可能在名字空间std中提供这些名字。 – 例子]

根据libstdc ++文档:

该标准规定,如果包含C样式头(在这种情况下为<math.h> ),则符号将在全局名称空间中可用,也许在名称空间std ::中可用(但这不再是一个坚定的要求)。另一方面,包括C ++风格的头文件( <cmath> )保证实体可以在命名空间std中find,也可以在全局命名空间中find。

http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html