2

在下面的代码中,我创建了一个不包含迭代器标头的 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);
}
4

1 回答 1

7

它恰好可以编译,因为<list>在您的情况下,其他一些标头也在拉动<iterator>。这可能适用于一个实现,但在另一个实现上会失败,甚至在当前库实现的下一个版本上也会失败。

您应该始终包含定义您使用的东西的标头,以确保它可以在任何地方编译。请注意,其他标准标头可以保证标准标头,但我认为这不是这些例外之一。

于 2013-02-16T18:16:56.037 回答