2016-04-01 22 views
0

私はstd :: numeric_limitsでいくつかのことを試していました。そして興味深い行動を観察した。std :: numeric_limits <int> :: has_infinity +条件付き3項演算子

cout << "Min = " << (std::numeric_limits<int>::has_infinity) ? "TRUE" : "FALSE"; 

出力0

cout << "Min = " << (std::numeric_limits<int>::has_infinity ? "TRUE" : "FALSE"); 

出力FALSE

三項演算子はどんな意味を持っていなかった最初のケ​​ースでは周りのstd::numeric_limits

ブレース()開始と終了の位置を注意してください。中括弧を最後に移動するとき、三項演算子(?:)だけが有意義であることがわかります。

この現象が発生する理由は何ですか?

+2

この説明は 'std :: numeric_limits'と直交しています。 – erip

+1

コンパイルすると 'error: 'テンプレートが返されます struct std :: numeric_limitsはテンプレートパラメータなしで使用されます cout <<" Min = "<<(std :: numeric_limits :: has_infinity)? "TRUE": "FALSE"; '。 – v7d8dpo4

+2

'std :: boolalpha'にも注意してください。 – o11c

答えて

10

precedence of the << operatorです。あなたの最初の式は、次のものと等価です。

(cout << "Min = " << (std::numeric_limits::has_infinity)) ? "TRUE" : "FALSE";