减少begin()迭代器,然后再次增加它

时间:2015-03-14 21:48:55

标签: c++ c++11

此类声明是否符合标准?

std::string str{"123"};
auto it = str.begin();
--it;
++it; // Does *it point to character '1' now?

我在g ++ 4.7.2和clang ++ 3.5上试过这个 - *it返回'1'。 这是c ++ 11中的标准行为吗?

1 个答案:

答案 0 :(得分:13)

不,它无效。

这是未定义的行为,因为24.2.6 [bidirectional.iterators]指出--it的后置条件是结果必须是可解除引用的。正如它在您的示例中指向begin()之前,不满足此条件,因此代码是非法的。

由于没有诊断要求它可能似乎有效,但你不能(也不应该)依赖它。