コンマ演算子
プログラミング言語 C および C++ におけるコンマ演算子(コンマえんざんし)は、左被演算子を評価しその値を捨て、その後右被演算子を評価する演算子である。順次演算子(じゅんじえんざんし)もしくは順次評価演算子 (sequential-evaluation operator) と呼称されることもある[1][2][3]。JIS X3010ではコンマ演算子と表記されている。
コンマ演算子の値と型は右被演算子の値と型となる。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)
脚注
[脚注の使い方]