C ++嵌套条件运算符的评估顺序

时间:2015-01-14 12:20:43

标签: c++ conditional operator-keyword evaluation

表达式

x = a ? b : c ? d : e;

据我所知,因为?:运算符具有正确的关联性,所以表达式被分组为

x = a ? b : (c ? d : e);

但是,评估顺序怎么样?结合性是否意味着首先评估(c?d:e)分支,然后它的答案作为参数传递给左?:运算符?或者首先进行评估,然后根据返回b或评估(c?d:e)分支?还是未定义?

2 个答案:

答案 0 :(得分:5)

n3376 5.16 / 1

  

条件表达式从右到左分组。第一个表达是   在上下文中转换为bool(第4条)。它被评估,如果它   是的,条件表达式的结果是值   第二个表达式,否则表达第三个表达式。只有一个   评估第二个和第三个表达式。 每个值计算   并且对与第一表达相关的副作用进行测序   在每个值计算和与之相关的副作用之前   第二或第三个表达。

答案 1 :(得分:1)

对于条件运算符:

  • 首先评估第一个操作数;
  • 根据第一个的值来评估第二个或第三个(但不是两个)。