三元运算符和加法优先级

Ternary Operator And Addition Precedence

能否解释一下下面的工作原理,这里给出优先级 table:http://en.cppreference.com/w/cpp/language/operator_precedence

鉴于:

#include <cstdio>

#define MY_CONSTANT 5.6

int main(int argc, char ** argv) {
    const double calculatedValue = 4.4;
    const double myValue = MY_CONSTANT + 1 ? 4.4 : -4.4;

    printf("%f\n", myValue);
    return 1;
}

我期待

myValue == 10

我明白了

myValue == 4.4;
const double myValue = MY_CONSTANT + 1 ? 4.4 : -4.4;

相当于:

const double myValue = (MY_CONSTANT + 1) ? 4.4 : -4.4;

因为在C++运算符优先级中?:的优先级低于+table

因为 (MY_CONSTANT + 1) 的计算结果为非零,所以我的值为 4.4

要获得 10 作为输出,您需要显式括号来更改计算顺序:

const double myValue = MY_CONSTANT + (1 ? 4.4 : -4.4);
//                                   ^              ^