在寻找有关包含顺序的最佳实践时,我被这个线程绊倒了:
C/C++ include file order/best practices [closed]
@squelart 指出,从本地到全局包含更好的做法,因为这减少了隐藏依赖项的机会。我刚刚使用以下代码在 VS2015 项目中对此进行了测试:
StrTest.h
#pragma once
class CStrTest
{
public:
CStrTest();
~CStrTest();
std::string test;
};
StrTest.cpp
#include <string>
#include "StrTest.h"
CStrTest::CStrTest()
{
}
CStrTest::~CStrTest()
{
}
我无法重现所述行为(隐藏的依赖二重奏,包括 StrTest.cpp 中的字符串优先)。编译器给我多个错误。那么这是过去的事情还是我忽略了什么?
编辑:VS2015 编译器错误:
错误 C4430 缺少类型说明符 - 假定为 int。注意:C++不支持default-int
Error C2039 'string': 不是 'std' 的成员
错误 C3646“测试”:未知的覆盖说明符
最佳答案
So is this something out of the past
不,隐藏的依赖项是标准行为,并且确实发生在现代编译器中。我不知道 VS,但 GCC 和 Clang 确实编译了您显示的程序而没有任何错误。演示:https://wandbox.org/permlink/ATJndwrOwirpDgDd
The compiler gives me mulitple errors.
虽然“隐式”包含是一种糟糕的风格,但就标准而言,它在技术上仍然是良好的格式,只要保证隐式包含的文件被您或编写包含它的 header 的任何人包含 - 标准标题没有这样的保证。
因此,我反对将隐式包含视为错误的编译器功能。明确启用的警告会更合适。
关于c++ - 包含顺序和隐藏的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44257618/