【发布时间】:2011-11-08 04:38:43
【问题描述】:
我有一个关于 c++ 标准迭代器的问题。
假设iter 是std::set<SomeType>::iterator 类型。
是:
iter = ++iter
同:
++iter
或者它们有什么不同?
编辑:
我找到了一个代码std::set<UserDefinedClass*>::iterator
被那样使用。 (指针)
我想知道这是否会导致我正在调试的程序出现故障。
我正在阅读答案,但很难判断哪个答案是正确的。
【问题讨论】:
-
我认为这是 UB,因为程序格式不正确
-
@iammilind:如果您担心序列点,请记住这些是迭代器,而不是原始类型。所以
++是运算符重载,所以这里有一个序列点;因此行为是明确定义的。 -
@iammilind:C++ 术语中的“格式错误”指的是一个包含可诊断错误的程序,即简单地说是一个无法编译的程序。另一方面,UB 通常是不可诊断错误的结果。上例中的
iter = ++iter不是格式错误的。