網頁

2022/8/9

C++ 參照 reference

C++的參照(reference)為一個物件/變數的別名(alias)。


宣告參照 declare reference

宣告參照的語法為在型別後加上ampersand符號&並初始化。

  • type - 參照的型別。
  • refName - 參照的名稱,即另一物件變數的別名。
  • init - 參照初始化表示式,可以是一個物件或返回參照的函式

type& refName = init;

下面宣告一個int的參照aRef為變數a的別名。可以看到修改a的內容即修改參照aRef的內容,反之亦然,即a與參照aRef為記憶體位址相同的同一變數。

main.cpp

#include <iostream>
using namespace std;

int main() {
    int a = 1;
    int& aRef = a; // 宣告變數a的參照aRef

    cout << aRef << endl; // 1

    a = 10;
    cout << aRef << endl; // 10

    aRef = 100;
    cout << a << endl; // 100

    cout << &a << endl;    // 0x7ffee298b848
    cout << &aRef << endl; // 0x7ffee298b848

    return 0;
}


參照特性

宣告參照必須初始化,否則編譯會出現錯誤。

main.cpp

#include <iostream>
using namespace std;

int main() {
    int& aRef; // error: declaration of reference variable 'aRef' requires an initializer

    return 0;
}

參照必不為null,其必代表一個物件/變數。

參照一旦初始化後便無法重新賦予新的參照。例如下面aRef = b僅是修改參照aRef的值,其仍為a的參照。

#include <iostream>
using namespace std;

int main() {
    int a = 1;
    int& aRef = a;

    int b = 2;
    aRef = b; // aRef仍是a的參照
    b = 20;

    cout << aRef << endl; // 2
    cout << a << endl;    // 2
    cout << b << endl;    // 20

    return 0;
}

參照與指標(pointer)是不一樣的東西,由於使用的修飾符都是&很容易搞混。


沒有留言:

張貼留言