C++ 速查手冊
7.1 - 參考
參考是變數 (variable) 的別名 (alias) ,例如
#include <iostream>
int main() {
int a = 22;
int& a_ref = a;
std::cout << "a: " << a << std::endl;
std::cout << "a_ref: "<< a_ref << std::endl;
a_ref = 11;
std::cout << "a: " << a << std::endl;
std::cout << "a_ref: " << a_ref << std::endl;
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:u0701_1.cpp
功能:示範 C++ 的參考型態
作者:張凱慶*/
第 5 行,宣告參考的型態 (type) 必須與參考所指向的變數型態相同,然後在型態名稱後後使用 & 運算子 (operator) 標明這是個參考變數,因此這個例子的參考變數為 a_ref ,等號右邊為所要指向的變數,此例為 a
int& a_ref = a;
由於 C++ 是自由格式的程式語言,因此寫成 int & a_ref 或 int &a_ref 都可以。
接下來我們印出 a 與 a_ref 的值,然後把 a_ref 改成 11
a_ref = 11;
這樣 a 也會變成 11 ,編譯後執行結果如下
$ g++ u0701_1.cpp |
$ ./a.out |
a: 22 |
a_ref: 22 |
a: 11 |
a_ref: 11 |
$ |
由上可看出參考等同於原來的變數,這被稱為左值參考 (lvalue reference) 。 C++11 增加了一個右值參考 (rvalue reference) ,用以增進運算的效率,這是用 && 來宣告,例如
int&& ref = a + b + c;
右值參考是對運算式的參考,舉例如下
#include <iostream>
int main() {
int a = 22;
int b = 33;
int c = 11;
int&& ref = a + b + c;
std::cout << "a: " << a << std::endl;
std::cout << "b: " << b << std::endl;
std::cout << "c: " << c
<< std::endl;
std::cout << "ref: " << ref << std::endl;
ref += 66;
std::cout << "a: " << a << std::endl;
std::cout << "b: "
<< b << std::endl;
std::cout << "c: " << c << std::endl;
std::cout << "ref: " << ref << std::endl;
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:u0701_2.cpp
功能:示範 C++ 的參考型態
作者:張凱慶*/
編譯後執行,結果如下
$ g++ u0701_2.cpp -std=c++0x |
$ ./a.out |
a: 22 |
b: 33 |
c: 11 |
ref: 66 |
a: 22 |
b: 33 |
c: 11 |
ref: 132 |
$ |
相關教學影片