コンマ演算子

コンマ演算子とは



コンマ演算子(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++の演算子

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。