cstdio stdio.h命名空间
我从cstdio
的c ++参考中看到这一行:
库的每个元素都在std namespace
定义。 但我试过这个代码:
std::printf("hello world");
printf("hello world");
C ++头文件是否将名称放在std和全局名称空间中都是真的吗?
包括cstdio
将标记名称导入到std
命名空间中,并可能导入到Global命名空间中。
包括stdio.h
在Global命名空间和可能的std
命名空间中导入符号名称。
这同样适用于所有c风格的标题。
参考:
C ++ 11标准
附录D(规范性)兼容性[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.h
形式的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中找到,也可以在全局名称空间中找到。
http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch03s02.html
链接地址: http://www.djcxy.com/p/29763.html