C++におけるi++と++iの違い:前置インクリメントと後置インクリメントの使い分け
インクリメント演算子は、変数の値を1つ増やすために使用される演算子です。一方、デクリメント演算子はその逆の働きをし、値を1つ減らします。
前置インクリメントと後置インクリメントの基本
前置インクリメント(++i) ― 変数の値が使用される前に、値が1増加します。
後置インクリメント(i++) ― 変数の値が使用された後に、値が1増加します。
C++における i++ および ++i の構文は次のとおりです。
++variable_name; // 前置インクリメント(Pre-increment)
variable_name++; // 後置インクリメント(Post-increment)
ここで、variable_name ― ユーザーが定義した変数の名前を表します。
C++における前置・後置インクリメントの例
#include <iostream>
using namespace std;
int main() {
int i = 5;
cout << "The pre-incremented value: " << i;
while (++i < 10)
cout << "\t" << i;
cout << "\nThe post-incremented value: " << i;
while (i++ < 15)
cout << "\t" << i;
return 0;
}
実行結果
The pre-incremented value: 56789
The post-incremented value: 101112131415
プログラムの解説
上記のプログラムでは、main() 関数内に前置インクリメントと後置インクリメントのコードが含まれています。整数型の変数 i は、まず値が10未満である間は前置インクリメント(++i)で処理され、その後、値が15未満である間は後置インクリメント(i++)で処理されます。
while (++i < 10)
cout << "\t" << i;
cout << "\nThe post-incremented value: " << i;
while (i++ < 15)
cout << "\t" << i;
前置と後置の使い分けのポイント
- 組み込み型(intなど)の場合: 単独で使用する限り、++i と i++ の結果に大きな違いはありません。
- クラス型やSTLのイテレータの場合: 後置インクリメントは元の値のコピーを一時的に作成するため、前置インクリメント(++i)の方が一般的に効率的です。イテレータ操作では ++it の使用が推奨されます。
- 式の中で使用する場合: 前置は「増やしてから使う」、後置は「使ってから増やす」という評価順序の違いがあるため、意図に応じて正しく選択することが重要です。
-
C++でvolatile(揮発性)修飾子を使う理由とは?2つの重要な意味をわかりやすく解説
C++におけるvolatile修飾子には、主に次の2つの重要な意味があります。これらを正しく理解することで、組み込み開発などでvolatileを適切に使いこなせるようになります。 volatileが持つ2つの意味 1. 変数の値はコード外の要因で変化する可能性がある volatile付きの変数は、プログラマが書いたコードによって変更していなくても、ハードウェアやOSなどの外部要因によって値が変わる可能性があります。そのため、コンパイラはこの変数の値を読み取るたびに、「前回読み取った値と同じだろう」「最後に格納した値のままだろう」といった仮定をすることができません。必ずその都度、実際にメモリ
-
C#のwhileループでcontinueステートメントを使う方法を解説
C#におけるcontinueステートメントは、ループ本体の残りの処理をスキップし、直ちに条件判定へ制御を移すための命令です。その後、条件が真であれば次の反復(イテレーション)が実行されます。continueはbreakステートメントに似た働きをしますが、決定的な違いがあります。breakがループ自体を強制終了させるのに対し、continueはループを終了せず、間にあるコードを飛ばして次の反復へ進むよう制御します。whileループの場合、continueステートメントが実行されると、プログラムの制御はループ先頭の条件判定部分へ移ります。このため、continueより後ろに記述された処理はその回の