2017-02-01 10 views
-3
int a = 1, b = 2; 
int c = a*b + b==0; // c = 0 
cout << a*b + b==0; // outputs 4 

c0に評価します。出力ストリームにおけるC++演算子の優先順位

なぜ同じ式をcoutステートメント出力4に入れていますか?

+0

<<は、==よりも*高い*優先順位を持ちます。 –

+0

C++に関する良い本やドキュメントには、優先順位を持つ演算子リストが含まれています... –

答えて

4

これらの演算子のprecedenceは>operator==operator*>operator+>operator<<あるため。 cout << a*b + b==0;(cout << ((a*b) + b)) == 0;に相当します。

そして((a*b) + b))の結果、即ち4は次に(cout << ((a*b) + b))の戻り値、すなわちcout0と比較され、プリントアウトされるであろう。 C++ 11 coutが暗黙的にvoid*operator void*経由で変換される前に、steramにエラーがあった場合にはnullポインタを返します。だからここでは0(つまりヌルポインタ)と比較して、それ以上のことはしません。

-2

answr by @songyuanyaoはすでにコードの動作を説明しています。

私は、簡単に実行できるコードを書く方がはるかに良いと言ってOPに応答したいと思います。

式の論理がはっきりとわからない場合は、簡略化してください。括弧を使用すると、理解しやすくなります。あなたが難読化されたコードコンテスト用のコードを書いている場合を除き、そのようなコードを書く理由はありません。

はあなたの意図に応じて、

int c = (a*b) + (b==0); 

または

int c = ((a*b + b) == 0); 

ににそれらのライン

int c = a*b + b==0; // c = 0 

を変換します。

関連する問題