“关于运算符中不确定顺序的函数调用”

时间:2017-12-07 05:59:34

标签: c++ language-lawyer

在描述中至少有2个操作员具有相似的文字:

  

关于不确定顺序的函数调用,   操作<运算符> 是单一评估。

<运算符> 可能是“复合赋值”([expr.ass])或“postfix ++”([expr.post.incr])。如果正确理解,该规则基本上表明禁止不确定顺序的函数调用与前述运算符之一之间的任何交错(重叠)。但是标准已经禁止它[intro.execution] p15:

  

< ...>当A或A时,评估A和B是不确定的   在B或B在A之前测序之前对其进行测序,但确实如此   未指明哪个。 [注意:不确定顺序的评估不能重叠,但可以先执行。 - 尾注]< ...>

所以问题是:操作员描述中的措辞是多余的,也可能完全删除?如果它不是多余的,请描述运营商的文本适用的情况,但一般规则不适用。

1 个答案:

答案 0 :(得分:0)

后缀增量的执行发生在两个步骤中:首先,应用左值到右值的转换,然后,在完整表达式结束之前的某个时刻,存储的值在对象中递增。后一步是按照前者的顺序排列的。

假设A在B之前被排序,并且A和B都用C不确定地排序。在这种情况下,没有A,B和C对可能重叠,但是,有三种可能的执行顺序:ABC,ACB和CAB。

在后缀增量的情况下,该语言提供的附加保证是订单只能是ABC或CAB。 在左值到右值转换和副作用之间永远不会发生函数调用。