誰かがこのC ++コンマオペレーターの短絡の例を説明できますか?
-
28-10-2019 - |
質問
誰かがこの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));
コンマオペレーターは短絡していません。左オペランドを評価し、結果を無視し、右オペランドを評価します。
bIsTRUE
は true
割り当ての正しいオペランドはそうだからです true
.
bIsFALSE
は false
なぜなら (true, false)
評価します true
, 、結果を無視してから、評価して降伏します false
.
bIsAlsoTRUE
は true
なぜなら ((true, false), true)
評価します (true, false)
, 、結果を無視してから、評価して降伏します true
.
所属していません StackOverflow