yes*_*aaj 27 c++ namespaces include
#include<filename> and #include<filename.h
在C++中使用>有什么区别?使用了哪两个,为什么要使用它?
Joh*_*itb 33
C++只包含从未使用的C标准中找不到的文件filename.h
.自从第一个C++标准出版(1998年)以来,他们已经使用filename
了自己的标题.
由C标准继承的文件变为cfilename
而不是filename.h
.继承使用的C文件filename.h
已被弃用,但仍然是C++标准的一部分.
不同之处在于std::
,cfilename
在C++中的名称空间中找不到C中未定义为宏的名称,而名称在filename.h
全局名称空间范围内.所以你会::size_t
在stddef.h和std::size_t
cstddef中找到.两者都是标准C++,但不推荐使用:: size_t(参见C++标准的附录D).
现在这些是不同的.
std::
.没有名字冲突了.filename.h
)将来可能会消失.CAd*_*ker 19
这#include <foo.h>
在C++标准之前的C++代码中很常见.标准将其更改为#include <foo>
放置在std
命名空间中的标题中的所有内容.(感谢litb指出标准从未允许.h标题.)
没有魔法,第一个寻找名为'foo.h'的文件,第二个寻找名为'foo'的文件.它们是文件系统中的两个不同文件.标准只是更改了应包含的文件的名称.
在大多数编译器中,旧标头仍然存在向后兼容性(以及与C的兼容性),但是想要遵循标准的现代C++程序不应该使用它们.
在标准C头的情况下,C++版本在开头有ac,所以C头
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
变
#include <cstdio>
Run Code Online (Sandbox Code Playgroud)
旧标准使用#include <filename.h>
语法。当命名空间和模板被添加到语言中时,标准更改为#include <filename>
.
这样做是为了让标准库的东西都可以放在 std 命名空间中。没有命名空间概念的旧代码仍然可以工作,因为#include <filename.h>
文件不使用命名空间。
新代码应始终使用该#include <filename>
格式。如果使用旧格式,它们定义的所有符号都将放置在全局命名空间中而不是 std 中。