条件运算符奇怪的输出
Conditional operator weird output
我曾经认为在下面这样的语句中使用条件运算符是可以的,但事实并非如此。在复杂语句中使用条件运算符有什么限制吗?
#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
为什么?
表达式 a * b + b + c ? b : a
分组 为
(a * b + b + c) ? b : a
这说明结果是 b
。另请注意,c
隐式转换为值为 0
的 int
。
此声明中的初始值设定项
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 );
我曾经认为在下面这样的语句中使用条件运算符是可以的,但事实并非如此。在复杂语句中使用条件运算符有什么限制吗?
#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
为什么?
表达式 a * b + b + c ? b : a
分组 为
(a * b + b + c) ? b : a
这说明结果是 b
。另请注意,c
隐式转换为值为 0
的 int
。
此声明中的初始值设定项
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 );