[英]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
為什么?
本聲明中的初始化程序
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 );
表達式a * b + b + c ? b : a
a * b + b + c ? b : a
被分組為
(a * b + b + c) ? b : a
其結果是b
。 另請注意, c
隱式轉換為值為0
的int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.