В приведенном ниже коде я создаю insert_iterator без включения заголовка итератора.
Как возможно, что это компилируется? Я новичок в C / C ++, так что это, вероятно, будет иметь очевидное объяснение.
#include <list>
//#include <iterator>
int main()
{
std::list<int> mylist(10,1);
std::insert_iterator<std::list<int> > it(mylist,mylist.begin());
return(0);
}
Это происходит скомпилировать, потому что некоторые из других заголовков, <list>
в твоем случае тянет <iterator>
также. Это может нормально работать с одной реализацией, но не сработать в другой, или даже в следующей версии вашей текущей реализации библиотеки.
Вы должны всегда включать заголовки, которые определяют, что вы используете, чтобы убедиться, что он будет компилироваться везде. Обратите внимание, что есть некоторые гарантии стандартных заголовков, которые извлекаются другими стандартными заголовками, но я не думаю, что это одно из тех исключений.
Других решений пока нет …