我对c ++ std迭代器有疑问.
假设iter是std::set<SomeType>::iterator类型.
方法是:
iter = ++iter
Run Code Online (Sandbox Code Playgroud)
同样如下:
++iter
Run Code Online (Sandbox Code Playgroud)
还是他们不一样?
编辑:
我找到了一种std::set<UserDefinedClass*>::iterator
以这种方式使用的代码 .(指针)
我想知道这是否会导致程序我调试失灵.
我正在阅读答案,但很难判断哪个答案是正确的.
这个问题没有明确的答案.答案取决于std::set<SomeType>::iterator类型的性质.如果它是用户定义的类型(即具有重载运算符的类),则iter = ++iter定义的行为ans确实等同于仅仅++iter.但是,如果std::set<SomeType>::iterator是内置类型,则会iter = ++iter产生未定义的行为,因为它在一个表达式中两次修改同一对象而没有插入序列点(违反了语言标准的5/4中提出的要求).
因此,从理论上讲,一般情况下应该避免做类似的事情,因为在一般情况下行为是未定义的.在实践中,虽然std::set<SomeType>::iterator通常是用户定义的类型并且iter = ++iter可以工作.然而,这不是在代码中使用这种表达式的理由.
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |