迭代器的含义在C++ 98和C++ 11之间作为位置提示std::set::insert(iterator position, const value_type& val)和std::multiset::insert(iterator position, const value_type& val)更改传递.在编译时是否有一种简单的方法来检测哪些正在使用并使用不同的代码?
上C++ 11的一般检查并不似乎是一个好主意,(1,2),并且我没有看到合适Boost.Config宏.
具体来说,C++ 98 的文档说:
如果position指向要插入元素之前的元素,则该函数会优化其插入时间.
而对于C++ 11,它说:
如果position指向将跟随插入元素的元素(或者到最后,如果它是最后一个元素),则该函数优化其插入时间.
这很重要,因为提示会影响插入调用的复杂性.如果提示正确,则复杂性仅为摊销常数.但如果不是,它的大小就是对数.
正如下面JerryCoffin所描述的那样,C++ 98规范本质上是一个错字.