此类声明是否符合标准?
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中的标准行为吗?
答案 0 :(得分:13)
不,它无效。
这是未定义的行为,因为24.2.6 [bidirectional.iterators]指出--it
的后置条件是结果必须是可解除引用的。正如它在您的示例中指向begin()
之前,不满足此条件,因此代码是非法的。
由于没有诊断要求它可能似乎有效,但你不能(也不应该)依赖它。