Любопытство о текстовом редакторе 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)


arrow_upward
1
arrow_downward

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

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

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

person mgiuffrida    schedule 02.05.2012

arrow_upward
0
arrow_downward

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

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

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

person Nicol Bolas    schedule 02.05.2012