阅读C ++ 0x草案的第1.9 / 14条。我找到了:
在每个值计算和与下一个要评估的完整表达式相关的副作用之前,对与全表达相关的每个值计算和副作用进行排序.8)
脚注8说
8)如12.2中所述,在评估完整表达式之后,对于临时对象进行零次或多次析构函数调用的序列,通常与每个构造的相反顺序临时对象。
“通常”是什么意思?我认为破坏的相反顺序是规则。
答案 0 :(得分:23)
我认为他们指的是任何绑定参考的临时工具。临时的生命周期延长到参考的生命周期,而其他临时工作者可能仍会被销毁。
答案 1 :(得分:3)
除了Mark B的答案(这是非常好的)还有另外一种情况:如果你创建一个通过前向迭代器访问的类型的临时对象,那么对象(显然就足够了)按迭代器支持的顺序创建也以相同的顺序销毁(不是反过来 - 因为迭代器不支持)。我不记得了,但我似乎记得同样的事情(或者至少被允许),即使有问题的容器将支持反向迭代(因此有问题的代码可以忽略容器/ iterator类型,大概是)。