誰かがこの C++ コンマ演算子の短絡の例を説明できますか?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
2 番目のバージョンが短絡してfalseを返し(少なくとも MSVC++ では)、他の 2 つのバージョンはtrueを返さないのはなぜですか?
誰かがこの C++ コンマ演算子の短絡の例を説明できますか?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
2 番目のバージョンが短絡してfalseを返し(少なくとも MSVC++ では)、他の 2 つのバージョンはtrueを返さないのはなぜですか?
コンマ演算子は割り当てよりも優先順位が低いため、これらは次のように解析されます。
(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