質問

誰かがこのC ++コンマオペレーターの短絡の例を説明できますか?

bIsTRUE     = true, false, true;
bIsFALSE    = (true, false), true;
bIsAlsoTRUE = ((true, false), true);

なぜ2番目のバージョンが短絡して戻ってくるのか 間違い (少なくともMSVC ++で)、他の2つのバージョンは返されません 真実?

役に立ちましたか?

解決

コンマオペレーターは割り当てよりも優先されるため、これらは次のように解析されます

(bIsTRUE     = true), false, true;     
(bIsFALSE    = (true, false)), true;   
(bIsAlsoTRUE = ((true, false), true)); 

コンマオペレーターは短絡していません。左オペランドを評価し、結果を無視し、右オペランドを評価します。

bIsTRUEtrue 割り当ての正しいオペランドはそうだからです true.

bIsFALSEfalse なぜなら (true, false) 評価します true, 、結果を無視してから、評価して降伏します false.

bIsAlsoTRUEtrue なぜなら ((true, false), true) 評価します (true, false), 、結果を無視してから、評価して降伏します true.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top