C++
 Computer >> コンピューター >  >> プログラミング >> C++

C・C++・Java・C#における前置インクリメントと後置インクリメント演算子の動作の違い

インクリメント演算子(++)には、「前置インクリメント」と「後置インクリメント」の2種類があり、どちらも変数の値を1増加させるために使われます。しかし、式の中で評価されるタイミングが異なるため、結果が大きく変わる場合があります。この記事では、両者の違いをC、C++、Java、C#の4つの言語のサンプルコードとともに詳しく解説します。

前置インクリメント(++b)とは

前置インクリメント演算子は、変数の値を式で使用する前に1増加させます。つまり、まず値が1増やされ、その新しい値が式の中で使われます。

例えば、a = ++b; という式で変数 b の初期値が5だった場合、まず b が6になり、その値が a に代入されるため、a の値は6になります。

前置インクリメントのサンプルコード

C++の場合

#include <iostream>
using namespace std;
int main() {
   int a, b = 15;
   a = ++b;
   cout << a;
}

出力:

16

C言語の場合

#include <stdio.h>
int main() {
   int a, b = 15;
   a = ++b;
   printf("%d", a);
}

出力:

16

Javaの場合

public class IncDec {
   public static void main(String[] args) {
      int a, b = 15;
      a = ++b;
      System.out.println("" + a);
   }
}

出力:

16

C#の場合

using System;
namespace IncDec {
   class Inc {
      static void Main() {
         int a, b = 15;
         a = ++b;
         Console.WriteLine("" + a);
      }
   }
}

出力:

16

後置インクリメント(b++)とは

一方、後置インクリメント演算子は、変数の値を式で使用した後に1増加させます。つまり、まず現在の値が式の中で使われ、その後で値が1増やされます。

例えば、a = b++; という式で変数 b の初期値が5だった場合、代入には元の値5が使われ、その後 b だけが6になります。したがって、a の値は5のままです。

後置インクリメントのサンプルコード

C++の場合

#include <iostream>
using namespace std;
int main() {
   int a, b = 15;
   a = b++;
   cout << a << endl;
   cout << b;
}

出力:

15
16

C言語の場合

#include <stdio.h>
int main() {
   int a, b = 15;
   a = b++;
   printf("%d\n", a);
   printf("%d", b);
}

出力:

15
16

Javaの場合

public class IncDec {
   public static void main(String[] args) {
      int a, b = 15;
      a = b++;
      System.out.println("" + a);
      System.out.println("" + b);
   }
}

出力:

15
16

C#の場合

using System;
namespace IncDec {
   class Inc {
      static void Main() {
         int a, b = 15;
         a = b++;
         Console.WriteLine("" + a);
         Console.WriteLine("" + b);
      }
   }
}

出力:

15
16

両者の違いまとめ

下記の表に、前置インクリメントと後置インクリメントの違いをまとめます(初期値 b = 5 の場合)。

書き方種類動作順序結果(a = ?)
++b前置インクリメント先に値を増やし、その後式で使用a = ++b; → a = 6
b++後置インクリメント先に式で使用し、その後値を増やすa = b++; → a = 5

なお、デクリメント演算子(--)である --bb-- も、値を1減らす点以外は全く同じ動作原理です。ループ処理や条件式の中でこれらを使う場合は、評価のタイミングを意識しないと思わぬバグにつながるため注意しましょう。

  1. 【比較解説】C++とJavaでデフォルトの仮想動作はどう違う?

    ポリモーフィズム(多態性)を実現する「仮想関数」の扱いは、C++とJavaで大きく異なります。この違いを理解することは、両言語を使いこなす上で非常に重要です。 C++の場合:デフォルトは非仮想 C++では、クラスのメンバー関数はデフォルトで非仮想(non-virtual)です。これは、動的ディスパッチのオーバーヘッドを避け、パフォーマンスを優先する設計思想によるものです。仮想関数として動作させたい場合は、virtualキーワードを明示的に指定する必要があります。 class Base { public:    virtual void display_msg() { //

  2. Javaのインクリメント・デクリメント演算子の基本と評価の仕組み

    ```html Javaのインクリメント・デクリメント演算子とは Javaには、変数の値を1つ増加させる「インクリメント演算子(++)」と、1つ減少させる「デクリメント演算子(--)」が用意されています。どちらもfor文などのループ処理やカウンタ管理で頻繁に使われる、非常に重要な演算子です。 後置インクリメント(b++)の動作 b++のように変数の後ろに置く「後置」形式の場合、まず現在の値で式を評価し、その後に値が1増加します。逆に++bのように前に置く「前置」形式では、値の増加が先に行われます。この違いを正しく理解していないと、意図しないバグの原因になるため注意が必要です。 複合条件式の評価