Jam*_*ens 0 c++ evaluation conditional operator-keyword
对于像这样的表达式
x = a ? b : c ? d : e;
Run Code Online (Sandbox Code Playgroud)
我理解,因为?:运算符具有正确的关联性,所以表达式被分组为
x = a ? b : (c ? d : e);
Run Code Online (Sandbox Code Playgroud)
但是,评估顺序呢?结合性是否意味着首先评估(c?d:e)分支,然后它的答案作为参数传递给左?:运算符?或者首先进行评估,然后根据返回b或评估(c?d:e)分支?还是未定义?
n3376 5.16/1
条件表达式从右到左分组.第一个表达式在上下文中转换为bool(第4条).它被评估,如果是,则条件表达式的结果是第二个表达式的值,否则是第三个表达式的值.仅评估第二和第三表达式中的一个.在与第二或第三表达式相关联的每个值计算和副作用之前,对与第一表达式相关联的每个值计算和副作用进行排序.