为什么tuple文档说要使用,例如:
#include "boost/tuple/tuple.hpp"
而不是
#include <boost/tuple/tuple.hpp>
我知道我的代码不太可能有一个名为“boost/tuple/tuple.hpp”的文件, 但使用 include <> 明确表明不要在当前目录中查找。
那么原因是什么呢?
使用 <> 并不意味着“不在当前目录中查找” - 它意味着在实现定义的位置查找,然后在其他地方查找,也是实现定义的。其中一个可以是当前目录,也可以都不是当前目录。这是 C++ 标准中最无用的部分之一。
<somefile>
的历史意义是查看系统标准的地方。 使用 "somefile"
意味着查看当前目录以及其他一些地方。
据我所知,原因是为了区分属于应用程序的标头和来自外部库的标头。我不能说为什么他们没有使用这个约定。这只是一个约定,而不是规则。
也许有人应该向 Boost 维护者提出这个问题?
使用 <...> 来增强。这不是您的代码。除非你的代码是boost。
使用“....”作为头文件,这是每个 C++ 程序中不可避免的。这是给读者的,而不是给编译器的。
来自msdn:
引用表格
该形式指示预处理器 在同一目录中查找包含文件 包含文件的目录 #include 语句,然后在 任何文件的目录 包含 (#include) 该文件。这 然后预处理器沿着 /I编译器指定的路径 选项,然后沿着指定的路径 INCLUDE 环境变量。
角括号形式
该形式指示预处理器 首先搜索包含文件 沿着 /I 指定的路径 编译器选项,那么,编译时 从命令行,沿着路径 由 INCLUDE 环境指定 变量。
您是在问两种包容风格的区别是什么,还是 Boost 的基本原理?由于其他人已经谈到了差异,我将添加我对后一个问题的看法:
总的来说,我不认为这两者更正确。这取决于您的项目的依赖关系的结构。例如,在我的项目中,我通常将 Boost 等的相关部分包含在项目的子目录中,因此倾向于使用
#include ""
形式。如果您想从更全球的位置获取 Boost 安装,您会更喜欢 #include <>
形式。