簡體   English   中英

cout 語句中使用的條件運算符

[英]Conditional operator used in cout statement

通過嘗試,我知道有必要在 cout 語句中的條件運算符周圍加上括號。 這里有一個小例子:

#include <iostream>

int main() {
  int a = 5;
  float b = (a!=0) ? 42.0f : -42.0f;
  // works fine
  std::cout << b << std::endl;
  // works also fine
  std::cout << ( (a != 0) ? 42.0f : -42.0f ) << std::endl;
  // does not work fine
  std::cout << (a != 0) ? 42.0f : -42.0f;

  return 0;
}

輸出是:

42
42
1

為什么需要這些括號? 條件運算符的結果類型在這兩種情況下都是已知的,不是嗎?

?:運算符的優先級低於<<運算符,即編譯器將您的最后一條語句解釋為:

(std::cout << (a != 0)) ? 42.0f : -42.0f;

這將首先將(a!=0)的布爾值流式傳輸到 cout。 然后,該表達式的結果(即對 cout 的引用)將被轉換為適當的類型以用於 ?: 運算符(即void* :參見cplusplus.com ),並取決於該值是否為真(即, cout 是否沒有設置錯誤標志),它將獲取值 42 或值 -42。 最后,它會丟棄該值(因為沒有人使用它)。

因為<<的優先級高於? .

趣味運動:

float ftest = std::cout << (a != 0) ? 42.0f : -42.0f;

拿那個,編碼恐怖!

您的代碼相當於:

if ( std::cout << (a != 0) )
     42.0f;
else
    -42.0f;

它輸出1因為,嗯, (a != 0) == true ;

暫無
暫無

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

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