🍣
[C++]カンマ演算子の使い方を理解する
今日はC++のカンマ演算子についてまとめてみる。
C++にはカンマ演算子というものがあるが、普段コードを書いているとあんまお目にかかる機会はない。どのようなものかというと、以下のように「,」を使うことで1行で複数の変数を定義するという時に使える演算子だ。
int a,b,c;
このカンマ演算子だが今日はもう少し深く中身を理解してみようと思う。
カンマ演算子は上記のように変数の定義時だけに使えるというものでもなく、式でも使うことができる。例えば以下のように書くこともできる。
int a = 1;
int b = 2;
int c = 3;
int d = 4;
a+b,c+d;
コンパイラはカンマ演算子を使用している箇所は左から順に評価をする。そのため、この場合だと最初にa+bが実行され、次にc+dが実行されるという動作になる。
式の戻り値を使う場合、何番目の戻り値が使われるのかも検証してみた。
int a = 1;
bool ret = (a==0,a==1); // ret: true
このようにa==0という式とa==1という式をカンマ演算子を使い1行で書くと戻り値はtrueになった。つまり一番最後に評価された式(一番右側の式)の戻り値が使われるという動作仕様のようだ。
関数の実引数をカンマ演算子を使い渡すこともできる。
この場合、関数の引数の区切り文字もカンマなのでコンパイラが区別できるよう()を付けて以下のように書いてあげないといけない。
int a = 1;
int b = 2;
int c = 3;
// a+cの結果(4)が第1引数に渡される
func((a+b, a+c), b, c);
上記のように少し注意が必要な点は多いカンマ演算子だが、基本使わずともプログラムはかけるので分かりやすいコードを書きたいならあまり使わない方がよいだろう。
Discussion
このときのカンマは宣言の文法の一部であって演算子としてのカンマではないです。
指摘ありがとうございます。
勉強になります。