モジュールのレッスン (2/2)
値および参照による受け渡し
C++ では、関数に引数を渡すとき、値による または 参照によるという 2 つの主な方法があります。
この違いを理解することは、プログラムの正確さとパフォーマンスの最適化の両方の鍵となります。
値渡し(コピー)
デフォルトでは、C++ は引数を値で渡します。これは、データの コピー がメモリ内に作成されることを意味します。関数内で行われた変更は、外部の元の変数には影響しません。
#include <iostream>
void increment(int n) {
n++; // Modifies only the local copy
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Prints 5, x remains unchanged!
return 0;
}参照渡し (&)
関数で元の変数を変更できるようにしたい場合、または大きなオブジェクト (長い文字列やベクトルなど) のコピーを避けたい場合は、参照渡し を使用する必要があります。
参照は、パラメータの型の後に & シンボルを追加することで宣言されます。
#include <iostream>
void incrementRef(int& n) {
n++; // Modifies the original variable directly
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Prints 6!
return 0;
}パラメーター int& n はコピーではなく、関数呼び出し時に渡される変数 x への エイリアス (直接参照) です。
自分で試してみてください
整数 n への参照を取得し (int& n を使用)、その値を 2 倍にする (n = n * 2) 戻り値の型が void の doubleNumber という名前の関数を定義します。メインで呼び出して、10 に初期化された変数 val を渡してから、val を出力します。
ヒントを表示
関数シグネチャでは、型の後に「&」文字を使用して参照を示します:「void doubleNumber(int& n)」。
3 回の試行後に解決策が利用可能になります
2 つの整数参照 a および b (int& a、int& b) を受け取り、一時変数 temp を使用してそれらの値を交換する swap という名前の関数を定義します。 main で呼び出して x と y を交換し、それらを出力します。
ヒントを表示
`int temp = a; を使用します。 a = b; b = temp;` を使用して値を交換します。
3 回の試行後に解決策が利用可能になります