c ++"iter = ++ iter"做什么?它有效吗?

eug*_*ene 3 c++ iterator stl

我对c ++ std迭代器有疑问.

假设iterstd::set<SomeType>::iterator类型.

方法是:

iter = ++iter 
Run Code Online (Sandbox Code Playgroud)

同样如下:

++iter 
Run Code Online (Sandbox Code Playgroud)

还是他们不一样?


编辑:

我找到了一种std::set<UserDefinedClass*>::iterator 以这种方式使用的代码 .(指针)
我想知道这是否会导致程序我调试失灵.
我正在阅读答案,但很难判断哪个答案是正确的.

AnT*_*AnT 7

这个问题没有明确的答案.答案取决于std::set<SomeType>::iterator类型的性质.如果它是用户定义的类型(即具有重载运算符的类),则iter = ++iter定义的行为ans确实等同于仅仅++iter.但是,如果std::set<SomeType>::iterator是内置类型,则会iter = ++iter产生未定义的行为,因为它在一个表达式中两次修改同一对象而没有插入序列点(违反了语言标准的5/4中提出的要求).

因此,从理论上讲,一般情况下应该避免做类似的事情,因为在一般情况下行为是未定义的.在实践中,虽然std::set<SomeType>::iterator通常是用户定义的类型并且iter = ++iter可以工作.然而,这不是在代码中使用这种表达式的理由.