操作数的评估顺序

fre*_*low 13 c c++ expression operator-precedence c++11

在表达式中a + b,a保证在之前进行评估b,还是未指定评估的顺序?我认为这是后者,但我很难在标准中找到明确的答案.

由于我不知道C是否处理与C++有所不同,或者如果在C++ 11中简化了评估顺序规则,我将把这个问题标记为三个.

Alo*_*ave 11

它是未指定的.

参考 - C++ 03标准:

第5节:表达式,第4段:

除非注明[例如&&和||的特殊规则],否则各个运算符的操作数和各个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.


Pet*_*der 11

在C++中,对于用户定义的类型a + b是一个函数调用,标准说:

§5.2.2.8 - [...] 未指定函数参数的评估顺序.[...]

对于普通运营商,标准说:

§5.4 - 除非另有说明,否则单个运算符的操作数和各个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.[...]

对于C++ 11,这些都没有改变.但是,第二个中的措辞改变了说订单是" 未经检验 "而不是未指定,但它基本上是相同的.

我没有C标准的副本,但我想它也是一样的.