簡體   English   中英

條件運算符奇怪的輸出

[英]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隱式轉換為值為0int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM