プログラミング言語 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)

脚注 編集

  1. ^ 平林雅英『ANSI C言語辞典』(初版)技術評論社、1989年10月25日、351頁。ISBN 4-87408-320-X 
  2. ^ Sequential-Evaluation Operator
  3. ^ 順次評価演算子

関連項目 編集