HOWTO · C++

C++ における演算子の優先順位と結合性

この記事では、C++ 演算子の優先順位と結合性について説明します。

このページの内容

この記事では、C++ の演算子と、それらが式で使用されたときにどのように評価されるかについて説明します。 それらの操作には特定のルールがあるため、それらを見て、C++ 演算子を使用した式の評価について学習します。

C++ の演算子

演算子は、変数と値を操作するために使用される記号です。 たとえば、+ および - 演算子は加算と減算に使用されます。

C++ では、演算子は次の 4つのカテゴリに分類されます。

  1. 算術演算子
  2. 代入演算子
  3. 関係演算子
  4. 論理演算子

算術演算子

これらの演算子は、一部のデータに対してさまざまな算術演算を実行するために使用されます。 たとえば、* は、2つ以上の数値または変数を乗算するために使用されます。

多数の算術演算子が以下にリストされています。

オペレーター記号 説明
+ 加算演算子
- 減算演算子
* 乗算演算子
/ 部門オペレーター
% モジュラス演算子 (除算後の剰余)

代入演算子

これらの演算子は、変数に特定の値を割り当てることができます。 = は代入演算子です。 以下の例を考えてみましょう。

int a;
a = 5;

ここで、a には代入演算子 = を使用して値 5 が割り当てられます。 他の代入演算子もあり、以下にリストされています。

オペレーター 同等のステートメント
a += 5 a = a +5
a -= 5 a = a -5
a *= 5 a = a*5
a /= 5 a = a /5
a %= 5 a = a%5

関係演算子

関係演算子は、2つの値またはオペランドを比較するために使用されます。 リレーションが true と評価された場合は値 1 を返し、false と評価された場合は 0 を返します。

C++ では複数の関係演算子が使用されます。

オペレーター 説明
<, > 大なり小なり
<=, >= より小さいおよび等しい、より大きいおよび等しい
== に等しい
!= 等しくない

論理演算子

論理演算子は、式が真か偽かを評価できます。 true の場合、返される結果は 1 です。 それ以外の場合、0。

以下にリストされている複数の論理演算子があります。

オペレーター 説明
&& AND 演算子。 すべての式が true の場合、これは true を返します。
`
! 演算子ではありません。 式が false の場合、これは true を返します。

C++ における演算子の優先順位と結合性

複数の演算子を含む式がある場合、式は演算子の優先順位に従って評価されます。 優先順位は、演算子の優先順位と、どの演算子が最初に評価されるかを定義します。

以下の例を考えてみましょう。

a = 3 * 5 / 2 + 3

この式では、どの演算子が最初に操作されるかは、演算子の優先順位によって決まります。

演算子の優先順位のリストを次の表に示します。

演算子の優先順位

これで、特定の演算子の優先順位が同じであることがわかります。 このような演算子の優先順位が同じである式は、結合規則を使用して評価されます。

結合性は、同じ優先レベルで評価される一連の演算子を定義します。 以下は、演算子の結合性を説明する表です。

演算子の結合性

C++ の式での暗黙的な型変換

式に型変数が混在している場合、コンパイラは演算とオペランドのデータ型に従って自動的に型変換を行います。 たとえば、次のコード スニペットを考えてみましょう。

int a = 2, b = 3, c = 5;
double f = 4.5;
double res = a + b / f + c;

コードの最後の行では、3つの変数が int 型で、1つが double 型であることがわかります。 演算子の優先順位に従って、/ が最初に評価されます。 この式の b/f は、int が double で除算されることを意味するため、結果は double に変換されます。

その後、int と double に対して + が評価されるため、結果は double に変換されます。 したがって、res は double データ型になります。

ここで、式の結果が、式に含まれる上位のデータ型に常に昇格されることがわかります。

int + double = > double + double = double int* double =
                   > double* double = double double* int =
                       > double* double = double int / double =
                                              > double / double =
                                                  double double / int =
                                                      > double / double =
                                                          double int / int = int

上記の式で、混合型の式の場合にどのように型が上位のデータ型に昇格されるかを確認できます。