条件运算符怪异输出

Bar*_*kPL 3 c++ boolean conditional-operator

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

预测输出: 21

实际输出: 10

为什么?

Vla*_*cow 6

此声明中的初始化程序

int result = a * b + b + c ? b : a;
Run Code Online (Sandbox Code Playgroud)

相当于

int result = ( a * b + b + c ) ? b : a;
Run Code Online (Sandbox Code Playgroud)

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

因此,条件表达式的值是第二个子表达式,b它等于10。

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

int result = a * b + b + ( c  ? b : a );
Run Code Online (Sandbox Code Playgroud)