2016-12-20 2 views

答えて

4

operator<<operator^より高い優先順位を有するので、cout << 0xF^0xF;はと等価である:

(cout << 0xF)^0xF; 

cout << 0xF戻りcout(すなわちstd::ostreamoperator^のオペランドとして使用することができません。

あなたは正しい優先度を指定するには、括弧を追加することができます。

cout << (0xF^0xF); 
+1

おかげでsongyuanyao。好奇心の理由から、 '' << "はビット演算子よりも高い優先順位を持っていますが、" + "のような算術演算子ではないのはなぜですか?例えば、' 'cout << 2 + 3; – Bist

+1

@Bist聖なる基準はそう言いますから。 :)とにかく 'cout << 2 + 3;でも期待通りに動作しますが、カッコを使うべきです。それはあなたの意図をより明確にし、微妙なバグを避けることができます。 Let's all(コード・リーダーとコード・ライター)が無意味な推測を止めましょう。 – songyuanyao

+4

@Bistビット演算子 '^ | & '値算術演算子' + - */<< >>より優先度が低くなります。もともと '<<'は左シフト演算子であり、乗算と同様のカテゴリーであった。だから、 '1 << 3 | 1 << 2」または「1 << 3^1 << 2」となる。次に '<< 'がストリーム抽出演算子として選択されたとき、優先順位は変更されませんでした。これはそれがさらに混乱するためです。 –