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)是不一樣的東西,由於使用的修飾符都是&
很容易搞混。
沒有留言:
張貼留言