1

给定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(); }
4

2 回答 2

1

A.h添加一个包含但不包含的新 C++ 文件<iostream>。下面的红色下划线std将重新出现。

VS2010 知道哪些文件包含那个头文件。如果他们中的任何一个不知道std,它会指出问题。

但是您是对的,如果您切换包含的顺序以使项目无法编译,它仍然会删除红色下划线。

于 2012-05-02T17:23:08.733 回答
0

Visual Studio 是为所有 C++ 程序员编写的。这意味着它不能假定头文件总是包含它们所需的所有内容。将红线放在标题未明确包含的所有内容下对于那些在严格环境中工作的开发人员来说意味着很多误报,其中标题以特定顺序包含并具有依赖关系。

因此,Visual Studio 试图弄清楚您的意思,而不是假设您的标题能够独立存在。

这可能不是您来源中的最佳实践,但他们必须考虑到这一点。

于 2012-05-02T17:49:05.460 回答