コンマ演算子

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

C/C++におけるコンマ演算子は左オペランドを評価しその値を捨て、その後右オペランドを評価する演算子である。カンマ演算子の値と型は右オペランドの値と型となる。C では右辺値だが、C++ では右オペランドが左辺値であれば左辺値となる。また、左オペランドの評価に対する副作用(C++では一時変数の破棄を除く)が完了した後に右オペランドが評価されることが規格上保証されている。

使用例[編集]

int a=1, b=2, c=3, i;   // このコンマは演算子としてではなくセパレータとして作用する
i = (a, b);             // 左オペランドaの値は読み捨てられるため、iにはbの値が代入される              ... a=1, b=2, c=3, i=2
i = a, b;               // iにはaが代入される。つまり (i = a), b; と書くのと同値                       ... a=1, b=2, c=3, i=1
i = (a += 2, a + b);    // aに2を加算した後、a+b = 3+2 をiへ代入する                                   ... a=3, b=2, c=3, i=5
i = a += 2, a + b;      // aに2を加算した後、aの値をiへ代入するつまり(i = a += 2), a + b; と同値        ... a=5, b=2, c=3, i=5
i = a, b, c;            // aの値をiへ代入                                                               ... a=5, b=2, c=3, i=5
i = (a, b, c);          // cの値をiへ代入                                                               ... a=5, b=2, c=3, i=3
 
int j=0;
j++, j++;               // 左オペランドの評価に対する副作用完了後に右オペランドが評価されるため未定義動作とならない(j=2)
(i, j) = 7;             // C ではコンマ演算子の結果は右辺値であるためコンパイルできない。C++では左辺値となるため問題ない(j=7)