【问题标题】:Conditional operator weird output条件运算符奇怪的输出
【发布时间】:2019-11-17 19:23:02
【问题描述】:

我曾经相信在下面这样的语句中使用条件运算符是可以的,但事实并非如此。在复杂语句中使用条件运算符有什么限制吗?

#include <iostream>
using namespace std;

int main() {
    int a = 1;
    int b = 10;
    bool c = false;

    int result = a * b + b + c ? b : a;

    std::cout << result << std::endl;

    return 0;
}

预测输出:21

实际输出:10

为什么?

【问题讨论】:

  • 运算符的顺序很重要。
  • 是的。我只是检查() :|
  • ?: 运算符的优先级倒数第二。
  • 是的。 : 有点特别,更像是一个分隔符。一旦解析器找到 ? 运算符,?: 之间的任何东西对于 ? 运算符来说总是一个真正的块,而在 : 之后的其余部分是假块。

标签: c++ boolean conditional-operator


【解决方案1】:

此声明中的初始化程序

int result = a * b + b + c ? b : a;

等价于

int result = ( a * b + b + c ) ? b : a;

子表达式a * b + b + c 的计算结果为20。由于它不等于 0,因此它会根据上下文转换为 true

所以条件表达式的值是第二个子表达式b,等于10。

我认为您的意思是声明中的以下初始化程序

int result = a * b + b + ( c  ? b : a );

【讨论】:

    【解决方案2】:

    表达式a * b + b + c ? b : a分组

    (a * b + b + c) ? b : a
    

    结果是b。另请注意,c 隐式转换为 int,其值为 0

    【讨论】:

      猜你喜欢
      • 2020-07-30
      • 1970-01-01
      • 2013-03-13
      • 2011-10-21
      • 2015-02-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多