给出下面的A.h
文件(请注意,我没有在此文件中包含<iostream>
标题。然后VS2010文本编辑器在std
下方显示一条红线,因为它无法识别此名称。
class A
{
public;
A() throw(std::bad_alloc);
};
但如果我在<iostream>
文件中包含A.cpp
标题,则A.h
文件中的红线会消失,即使A.cpp
已关闭。这怎么可能?
#include <iostream>
#include "A.h"
A::A() { throw std::bad_alloc(); }
答案 0 :(得分:1)
添加包含A.h
但不包含<iostream>
的新C ++文件。 std
下的红色下划线将重新出现。
VS2010知道哪些文件包含该头文件。如果他们中的任何人不知道std
,就会指出问题。
但是你是对的,如果你切换包含的顺序以便项目不能编译,它仍然会删除红色下划线。
答案 1 :(得分:0)
Visual Studio是为所有C ++程序员编写的。这意味着它不能假设头文件总是包含它们所需的一切。在标题未明确包含的所有内容中放置红线对于那些在严格环境中工作的开发人员来说意味着很多误报,其中标题包含在特定顺序中,具有依赖性。
因此,Visual Studio会尝试弄清楚您的意思,而不是假设您的标题能够独立存在。
这可能不是您的来源中的最佳做法,但他们必须考虑到它。