メインコンテンツにスキップ
モジュール 3 · レッスン 2 / 2コース内の 8/18~12 min
モジュールのレッスン (2/2)

値および参照による受け渡し

C++ では、関数に引数を渡すとき、値による または 参照によるという 2 つの主な方法があります。

この違いを理解することは、プログラムの正確さとパフォーマンスの最適化の両方の鍵となります。

値渡し(コピー)

デフォルトでは、C++ は引数を値で渡します。これは、データの コピー がメモリ内に作成されることを意味します。関数内で行われた変更は、外部の元の変数には影響しません。

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;
}

参照渡し (&)

関数で元の変数を変更できるようにしたい場合、または大きなオブジェクト (長い文字列やベクトルなど) のコピーを避けたい場合は、参照渡し を使用する必要があります。

参照は、パラメータの型の後に & シンボルを追加することで宣言されます。

C++
#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 への エイリアス (直接参照) です。

自分で試してみてください

運動#cpp.m3.l2.e1
試行回数: 0読み込み中…

整数 n への参照を取得し (int& n を使用)、その値を 2 倍にする (n = n * 2) 戻り値の型が void の doubleNumber という名前の関数を定義します。メインで呼び出して、10 に初期化された変数 val を渡してから、val を出力します。

エディターを読み込み中…
ヒントを表示

関数シグネチャでは、型の後に「&」文字を使用して参照を示します:「void doubleNumber(int& n)」。

3 回の試行後に解決策が利用可能になります

運動#cpp.m3.l2.e2
試行回数: 0読み込み中…

2 つの整数参照 a および b (int& a、int& b) を受け取り、一時変数 temp を使用してそれらの値を交換する swap という名前の関数を定義します。 main で呼び出して x と y を交換し、それらを出力します。

エディターを読み込み中…
ヒントを表示

`int temp = a; を使用します。 a = b; b = temp;` を使用して値を交換します。

3 回の試行後に解決策が利用可能になります