三元运算符和加法优先级
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);
// ^ ^
能否解释一下下面的工作原理,这里给出优先级 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);
// ^ ^