我有一个指向容器的迭代器,一个是const类型,另一个不是。将它们进行比较来查看它们是否都指向容器中的同一对象是否会出现问题?这是一个关于C++11迭代器的普遍问题:
可以合法比较const和非const迭代器以查看它们是否都引用相同的对象吗?无论容器类型如何(即它们都是保证引用同一容器或该容器的end()处的对象的迭代器,但一个是const而另一个不是)。
例如,请考虑以下代码:
some_c++11_container container;
// Populate container
...
some_c++11_container::iterator iObject1=container.begin();
some_c++11_container::const_iterator ciObject2=container.cbegin();
// Some operations that move iObject1 and ciObject2 around the container
...
if (ciObject2==iObject1) // Is this comparison allowed by the C++11 standard?
...; //Perform some action contingent on the equality of the two iterators
some_container::iterator
和some_container::const_iterator
可能是不同的类型。虽然它们模拟了T*
和T const *
,但它们实际上并不是这样。这就是为什么这是一个好问题。你可能很难找到一个不能正常工作的例子,但这并不意味着标准保证它会工作。除了现在有几个答案表明它确实可以工作,但这并不是我认为显而易见/平凡的。 - BoBTFish