0Pricing
C++ Academy · レッスン

変数の別名となる参照の理由

参照を、再設定もnull化もできないコンパイル時の別名として学びます。

「変数の別名となる参照の理由」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

参照とは何か

参照とは、別の変数に対するコンパイル時の別名です。ポインターでもコピーでもなく、別の名前で同じオブジェクトを指すものです。

参照の構文

型の後ろに&を付けます。参照は宣言時に初期化する必要があり、後から別の対象に付け替えることはできません。

int x = 10;
int& ref = x;     // ref is an alias for x
ref = 20;         // x is now 20

ポインターとの比較

参照とポインターはどちらも間接的にオブジェクトを扱いますが、次の違いがあります。

  • 参照は初期化が必須ですが、ポインターはnullにできます
  • 参照は別のオブジェクトに再代入できません
  • 参照では*や->を使わず、通常の変数のように扱います

付け替えはできない

いったん束縛されると、参照は常に同じオブジェクトを指します。参照に代入すると、参照自体ではなく参照先の値が変更されます。

int a = 1, b = 2;
int& r = a;
r = b;       // a becomes 2, r still refers to a

参照は同じアドレスを持つ

参照は元の変数そのもののように動作します。参照のアドレスを取得すると、参照先のアドレスが得られます。

int x = 42;
int& r = x;
std::cout << (&r == &x);   // 1 (true)

const参照

const参照は読み取り専用の別名です。大きなオブジェクトをコピーせずに渡す場合に便利です。

void print(const std::string& s) {
    std::cout << s;  // can read, not modify
}

一時オブジェクトへのconst参照の束縛

const参照に束縛された一時オブジェクトは、参照自体の寿命まで存続します。式の中で便利な機能です。

const std::string& greeting = std::string("Hi");
std::cout << greeting;  // valid

戻り値の型としての参照

関数は参照を返すことができます。連鎖呼び出しや、メンバーへの直接アクセスに便利です。ただし、ローカル変数への参照を返さないよう注意してください。

int& at(std::vector<int>& v, size_t i) {
    return v[i];
}

at(v, 0) = 99;   // modifies v[0]

ローカル変数への参照は決して返さない

ローカル変数は関数が戻ると破棄され、参照はダングリング参照になります。これは未定義動作です。

// BUG
int& bad() {
    int x = 10;
    return x;  // x dies here
}

範囲ベースforでの参照

範囲ベースforでは、参照が暗黙的に使用されます。auto&は参照を取得し、autoはコピーを取得します。

構造化束縛での参照

C++17の構造化束縛では、値、参照、const参照のいずれでも束縛できます。

std::pair<int, int> p = {1, 2};
auto [a, b] = p;            // copies
auto& [x, y] = p;           // references — modifying x changes p.first

確認問題

なぜ参照は、後から別の変数へ付け替えられないのですか。

まとめ

参照は、初期化が必須で付け替えのできないコンパイル時の別名です。通常の変数のように見え、nullになることも再代入されることもありません。読み取り専用のビューにはconst参照を使用してください。

よくある質問

「変数の別名となる参照の理由」レッスンは無料ですか?

はい。「変数の別名となる参照の理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「変数の別名となる参照の理由」で何を学びますか?

参照を、再設定もnull化もできないコンパイル時の別名として学びます。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「変数の別名となる参照の理由」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 変数の別名となる参照の理由
  2. 値渡しと参照渡しの比較
  3. const参照とその使いどころ
  4. 参照の寿命とダングリング参照
← C++ Academyに戻る