Любопытство о текстовом редакторе VS2010

Учитывая приведенный ниже файл 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(); }

person Belloc    schedule 02.05.2012    source источник


Ответы (2)


Добавьте новый файл C++, который включает A.h, но не включает <iostream>. Красное подчеркивание под std снова появится.

VS2010 знает, какие файлы включают этот заголовочный файл. Если кто-то из них не знает о std, он укажет на проблему.

Но вы правы, если вы измените порядок включений, чтобы проект не компилировался, он все равно удалит красную подчеркивание.

person mgiuffrida    schedule 02.05.2012

Visual Studio написана для всех программистов на C++. Это означает, что он не может предполагать, что заголовочные файлы всегда включают в себя все, что им нужно. Помещать красные линии под все, что явно не включено в заголовок, означало бы много ложных срабатываний для тех разработчиков, которые работают в строгой среде, где заголовки включаются в определенном порядке с зависимостями.

Таким образом, Visual Studio пытается выяснить, что вы имеете в виду, вместо того, чтобы предполагать, что ваши заголовки могут стоять сами по себе.

Это может быть не лучшая практика в вашем источнике, но они должны учитывать это.

person Nicol Bolas    schedule 02.05.2012