Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 之间的差异<;iostream>;及;iostream“;(引用)在#包括?_C++_Syntax - Fatal编程技术网

C++ 之间的差异<;iostream>;及;iostream“;(引用)在#包括?

C++ 之间的差异<;iostream>;及;iostream“;(引用)在#包括?,c++,syntax,C++,Syntax,可能重复: 当我编写程序时,我包括了像#include这样的库。但是,#include“iostream”也是正确的,并且编译代码时不会出现任何错误或问题 因此,我想知道和“之间的区别是什么?只查找编译器提供的头文件,而“”首先查找项目目录,如果没有头文件,则只查找编译器提供的头文件 在源文件旁边添加一个名为iostream的文件。现在使用“”包含并观察它失败(因为它将获得空文件)或使用并观察它成功(因为它将忽略本地文件)。双引号include用于告诉编译器在include目录中搜索包含的头文

可能重复:

当我编写程序时,我包括了像
#include
这样的库。但是,
#include“iostream”
也是正确的,并且编译代码时不会出现任何错误或问题

因此,我想知道
之间的区别是什么?

只查找编译器提供的头文件,而“”首先查找项目目录,如果没有头文件,则只查找编译器提供的头文件


在源文件旁边添加一个名为iostream的文件。现在使用“”包含并观察它失败(因为它将获得空文件)或使用并观察它成功(因为它将忽略本地文件)。

双引号include用于告诉编译器在include目录中搜索包含的头文件之前,先在本地目录中查找包含的头文件。当您试图在代码的本地头文件中包含时,可以看到这种差异。如果使用“”包含本地头文件,除非本地目录是“包含”目录路径,否则编译器将失败。

使用
时,编译器仅查找系统指定的头目录(例如,在
包含
环境变量中设置的任何目录)

当您使用
时,编译器首先在本地目录中查找,如果失败,则像您使用
一样重新搜索。从技术上讲,(即,根据标准),它不必是“本地”目录,但这就是它在我所知道的每个编译器中的工作方式)

如果您介意,标准中的官方措辞实际上有点模糊(§16.2/2-3):

表单的预处理指令

#包括新行

在实现定义的位置序列中搜索由指定位置唯一标识的头 <和>分隔符之间的顺序,并导致该指令被整个内容替换 标题的标题。如何指定位置或标识标头是实现定义的

表单的预处理指令

#包括“q-char-sequence”新行

使该指令替换为指定指令标识的源文件的全部内容 “分隔符”之间的顺序。在定义的实现中搜索命名的源文件 如果不支持此搜索,或者如果搜索失败,则将重新处理该指令,就像读取该指令一样

#包括新行

具有与原始指令相同的包含序列(包括>字符,如果有)

“XXX”-它在您的一个目录中。
-它在微软的SDK或任何SDK中(你可以在

中添加),我希望你看看副本,这里所有的答案都是错误的。