有条件地包含 C++ 标准库

Posted

技术标签:

【中文标题】有条件地包含 C++ 标准库【英文标题】:Conditional inclusion of C++ standard libraries 【发布时间】:2019-10-03 20:53:51 【问题描述】:

我有 2 个使用 std::string 的对象来工作。对象 A 可以独立于对象 B 使用。但是,可能会出现这样一种情况,即对象 A 和 B 可能在同一个 main.cpp 文件中使用,这可能会导致头文件冲突并且头文件可能会被编译两次。如何防止被编译两次? 我试过使用:

#ifndef string_H
#define string_H
#endif

它不起作用并且对象B无法使用字符串库,我认为这仅用于第三方库,例如我自己的库,而不是用于官方库。所以我的问题是,您如何将包含保护放在标准库的标头上?

编辑:我使用的是 Visual Studio 2017,所以我相信它都是由 Microsoft 编写的。感谢您的回答,我不知道 std:: 已包含已内置的警卫。

【问题讨论】:

请发minimal reproducible example。 我承认我不追随。标准库头文件注意保护自己不被重复包含,那么你为什么要坚持这个练习呢?你到底出了什么问题? 【参考方案1】:

如何将包含保护放在标准库中的标头上

你不会的。标准库头文件已经内置了包含保护。 编辑: C++ 标准要求标准库头文件不能被双重包含,但它没有指定实现应该如何去做。但是,任何符合标准的实现都允许您多次包含标准库标头而不会导致任何问题。 (source)

【讨论】:

他们是否保证有标准的守卫? 然而这对提问者来说似乎是个问题,所以这个答案的用处有限。我建议不要回答不清楚和不完整的问题。 @gerum 本来打算给你一个冗长的答案,但是I've been beaten to the punch complete with standard quotes. @user4581301 我正要链接到那个; 在某种程度上,我可以比在标准中查找 Stack Overflow 帖子更快地找到它是一件好事。

以上是关于有条件地包含 C++ 标准库的主要内容,如果未能解决你的问题,请参考以下文章

c++ 标准库函数都有哪些?

C++标准库(体系结构与内核分析)

C++标准库和标准模板库

如何正确包含来自 NVIDIA C++ 标准库的文件?

第7讲——函数初步

C++语法小记---标准库