Это досадная дыра в моих знаниях, и я не могу найти ответ.
Я понимаю, почему это работает во время компиляции (заголовок никогда не компилируется изолированно, поэтому stdafx.h будет иметьуже включен), но не почему он работает при редактировании.
Скажем, у меня есть следующие файлы:
stdafx.h
#pragma once
#include <string>
MyFunction.h
#pragma once
void MyFunction( std::string Text );
MyFunction.cpp
#include "stdafx.h"
#include "MyFunction.h"
void MyFunction( std::string Text )
{
// implementation here
}
Когда я редактирую MyFunction.h, как Intellisense находит std::string
с целью автозаполнения, а не показа его как неопределенного и т. Д.
Я спрашиваю частично из любопытства и частично потому, что если я не знаю механизм, то я не могу знать, если я 'я рискую его сломать или как починить, когда я это сделаю. Я видел, как он ломался несколько раз, в результате чего большая часть рассматриваемого заголовка была помечена как ошибка, а затем в какой-то момент он либо просто исправляется, либо я принимаю, что он не возвращается, и добавляет несколько дополнительных стратегическихвключает в заголовок.
Просто повторюсь: я не спрашиваю, как std :: string находится во время компиляции, я спрашиваю, как он обнаруживается при редактировании файла заголовка.