12

誰かがこの C++ コンマ演算子の短絡の例を説明できますか?

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

2 番目のバージョンが短絡してfalseを返し(少なくとも MSVC++ では)、他の 2 つのバージョンはtrueを返さないのはなぜですか?

4

1 に答える 1

28

コンマ演算子は割り当てよりも優先順位が低いため、これらは次のように解析されます。

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

コンマ演算子は短絡しません。左のオペランドを評価し、結果を無視してから、右のオペランドを評価します。

bIsTRUEtrue代入の右オペランドが であるためですtrue

bIsFALSEは を評価し、結果を無視してから、 をfalse評価して譲歩するためです。(true, false)truefalse

bIsAlsoTRUEは を評価し、結果を無視してから、 をtrue評価して譲歩するためです。((true, false), true)(true, false)true

于 2011-05-04T00:40:39.003 に答える