【问题标题】:C++ nested conditional operator order of evaluationC++ 嵌套条件运算符求值顺序
【发布时间】:2015-03-12 15:07:46
【问题描述】:

对于像这样的表达式

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

我了解因为 ?: 运算符具有右结合性,所以表达式被分组为

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

但是,评估顺序呢?关联性是否意味着 (c ? d : e) 分支首先被评估,然后它的答案作为参数传递给左边的 ?: 运算符?还是先评估 a ,然后根据返回 b 或评估 (c ? d : e) 分支?还是未定义?

【问题讨论】:

  • 即使我能牢记关联性,为了清楚起见,我总是使用括号
  • 1 > 2 ? cout << "yes" : cout << "no";

标签: c++ conditional operator-keyword evaluation


【解决方案1】:

n3376 5.16/1

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

【讨论】:

  • 我理解正确吗:"a" 被转换为 bool,如果它是 true,"b" 是结果,如果它是 false,那么 (c ? d : e) 分支被评估了吗?
【解决方案2】:

对于条件运算符:

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

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 2013-06-27
    • 2021-07-12
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2012-01-07
    • 2010-12-27
    相关资源
    最近更新 更多