C++:如果我包含多个头文件,如果两者都有#include <string>,它会导致任何问题吗?

C++: Does it cause any problems if I include multiple header files, if both have #include <string>?

我正在尝试编写自己的小程序 "game",这就是我开始自己编程的原因。但是,使用多个头文件来声明由单独的 .cpps 使用的多个类给我带来了一个问题:如果我 #include <string> 到每个头文件中,并将这些头文件中的多个包含到一个单独的文件中,它会在以后造成任何伤害吗.cpp? 一个例子:

//a.cpp
#include "x.h"
#include "y.h"
int main(){blablabla}

//x.h
#ifndef XCLASS_H #define XCLASS_H
#include <string>
class xclass{std::string xstring;};
#endif

//y.h
#ifndef YCLASS_H #define YCLASS_H
#include <string>
class yclass{std::string ystring;};
#endif

据我所知,两者都会包含到 a.cpp。当我尝试时,程序运行良好,没有任何错误。我正在使用 Visual Studio 2012。这会导致其他计算机出现问题吗?如果是,我该如何避免?

您可以在每个翻译单元中包含一个标准 header 任意多次。

通常在第一个包含之后的后续包含没有效果。

一个例外是 <assert.h> header,它定义了 assert 宏。这个 header 可以不同地定义 assert,具体取决于符号 NDEBUG,每次包含它时。由于这有点不寻常,标准明确指出了这一点。


标准语:

C++11 §17.6.22/2 [using.headers]:

A translation unit may include library headers in any order (Clause 2). Each may be included more than once, with no effect different from being included exactly once, except that the effect of including either <cassert> or <assert.h> depends each time on the lexically current definition of NDEBUG.