我应该包括<;元组>;? 我是C++中的新手,我怀疑,这个问题当然不仅仅涉及代码> tuple < /C>。p>

我应该包括<;元组>;? 我是C++中的新手,我怀疑,这个问题当然不仅仅涉及代码> tuple < /C>。p>,c++,header,C++,Header,所以,我看了一个教程,大致有以下代码: #包括 std::tuple t(…) 为什么要包含?特别是,考虑到我们显式地编写std::tuple。代码编译时没有#include行就可以了…因为是一个头文件,它在名称空间std中包含元组类。仅仅因为您明确地说std::,并不意味着如果没有包含它,编译器就能够找到它 在本例中,它对您有效的原因可能是因为您包含的另一个标题已经包含了,因此您的代码间接包含了,或者是因为您使用的编译器自动包含了它。这是标准的保证,不应依赖。始终包含使代码可移植所需的标题。

所以,我看了一个教程,大致有以下代码:

#包括
std::tuple t(…)
为什么要包含?特别是,考虑到我们显式地编写
std::tuple
。代码编译时没有
#include
行就可以了…

因为
是一个头文件,它在名称空间
std
中包含
元组
类。仅仅因为您明确地说
std::
,并不意味着如果没有包含它,编译器就能够找到它


在本例中,它对您有效的原因可能是因为您包含的另一个标题已经包含了
,因此您的代码间接包含了
,或者是因为您使用的编译器自动包含了它。这是标准的保证,不应依赖。始终包含使代码可移植所需的标题。

始终应包含代码中使用的任何类型的特定标题

代码编译时没有那一行
#include

您的代码在编译时不使用头是偶然的,因为它可能包含在程序中使用的另一个标准头中,并且不受标准的保证,因此不可移植

特别是,考虑到我们显式地编写
std::tuple

显式使用
std::
名称空间对于该规则没有任何意义

您还应该始终明确使用
std
命名空间中的类或类型,以防止陷入歧义问题

相关资料:


C++中,你需要为你使用的所有东西都包括标题。

std::
是关于名称空间的,它完全不同。
显然,编译器是足够聪明的,但是大多数编译器都不会。

< P>标准的标题应该包括C++标准的其他标准头。例如,标题
必须包括标题

但是,实现可以自行决定在其他标准头中包含标准头

您不应该依赖于此,因为使用一个编译器编译的程序不会使用另一个编译器编译


即使根据C++标准的要求,在另一个标准头中包含一个标准头,但是,明确地包含这样的标题,这是一个很好的做法,因为程序的用户(其他程序员)应该关心标题的依赖关系,并且可以自由地包括或排除其他标题

#include
提供了实现(即元组类)。
std::
是实现所在的命名空间。即使它在没有明确指定include的情况下也能工作,为了清晰起见,也应该这样做。没有
#include
的代码只会编译,因为通过其他文件包含的元组总是包含定义或声明类或函数的头。系统头(哪个系统头包括哪些其他系统头)之间的相互依赖关系是未知的实现细节。
#include
并不总是提供实现。它为非模板类或函数提供接口(在这种情况下,实现由库提供并由链接器处理),并为模板类或函数提供实现。