コンマ演算子(comma operator)は、
プログラミング言語のC/
C++や
JavaScriptなどで用いられる演算子の一つです。記号には
コンマ「,」が使用されます。この演算子の特徴は、
左側のオペランド(被演算子)を評価した後、その結果を破棄し、次に右側のオペランドを評価するという点です。
コンマ演算子は、順次演算子または順次評価演算子とも呼ばれます。JIS規格では「
コンマ演算子」と表記されていますが、「カンマ演算子」と表記されることもあります。
コンマ演算子の値と型
コンマ演算子の評価結果の値と型は、右側のオペランドの値と型になります。
C言語では右辺値となりますが、
C++では右オペランドが左辺値であれば左辺値となります。
また、規格上、左オペランドの評価における副作用(
C++では一時変数の破棄を除く)が完了した後、右オペランドが評価されることが保証されています。
優先順位
コンマ演算子の優先順位は、すべての演算子の中で最も低いと規定されています。そのため、代入演算子(`=`)よりも優先順位が低く、
コンマ演算子の評価結果を何らかの変数に代入する場合は、括弧で囲む必要があります。
例: `x = (a, b);`
この例では、まず`a`が評価され、その結果は破棄されます。次に`b`が評価され、その値が`x`に代入されます。
セパレータとしてのコンマとの違い
コンマは、複数の変数の宣言、
配列や
構造体の初期化子リスト、関数の引数リストなど、特定の文脈でセパレータ(区切り文字)としても使用されます。このセパレータとしての
コンマと、演算子としての
コンマは全く異なるものです。
後発の
プログラミング言語である
JavaやC#などでは、
コンマ演算子はサポートされておらず、
コンマはセパレータとしてのみ使用されます。
使用例
コンマ演算子の典型的な用途として、`for`文において複数の変数を扱うケースが挙げられます。
C99以前の規格では、`for`文の初期化節や反復式には式のみを書くことができたため、複数の変数を初期化したり、値を増減させたりする際に
コンマ演算子が使われていました。
c
include
int main() {
int i, j;
for (i = 0, j = 10; i < 5; i++, j--) {
printf("i = %d, j = %d
", i, j);
}
return 0;
}
この例では、`for`文の初期化部分で`i`と`j`を同時に初期化し、反復部分で`i`をインクリメント、`j`をデクリメントしています。
C99以降では、`for`文の初期化節に宣言も書けるようになりましたが、複数の変数宣言における
コンマは演算子ではなくセパレータとして扱われます。
c
include
int main() {
for (int i = 0, j = 10; i < 5; i++, j--) {
printf("i = %d, j = %d
", i, j);
}
return 0;
}
上記の例では、初期化節で`i`と`j`を同時に宣言しています。この場合の
コンマはセパレータとして機能します。
C++の`for`文の構文仕様はCと若干異なりますが、実質的な使い方は同様です。
まとめ
コンマ演算子は、左側のオペランドを評価した後、その結果を破棄し、右側のオペランドを評価する演算子です。主にC/
C++で用いられ、for文での複数変数の操作などに使われることがあります。セパレータとしての
コンマとの違いを理解しておくことが重要です。後発の言語では、
コンマ演算子はサポートされていないことが多い点も覚えておきましょう。
関連項目
* Cと
C++の演算子