C++引用入门教程(一)
??在C ++ 中引用好比一個對象的量子糾纏態,改變這個糾纏態,就改變對象
??我們知道,參數的傳遞本質上是一次賦值的過程,賦值就是對內存進行拷貝。所謂內存拷貝,是指將一塊內存上的數據復制到另一塊內存上
??對于像 char、bool、int、float 等基本類型的數據,它們占用的內存往往只有幾個字節,對它們進行內存拷貝非常快速。而數組、結構體、對象是一系列數據的集合,數據的數量沒有限制,可能很少,也可能成千上萬,對它們進行頻繁的內存拷貝可能會消耗很多時間,拖慢程序的執行效率。
??C/C++ 禁止在函數調用時直接傳遞數組的內容,而是強制傳遞數組指針,這點已在《C語言指針變量作為函數參數》中進行了講解。而對于結構體和對象沒有這種限制,調用函數時既可以傳遞指針,也可以直接傳遞內容;為了提高效率,我曾建議傳遞指針
??但是在 C++ 中,我們有了一種比指針更加便捷的傳遞聚合類型數據的方式,那就是引用(Reference)。
??引用(Reference)是 C++ 相對于C語言的又一個擴充。引用可以看做是數據的一個別名,通過這個別名和原來的名字都能夠找到這份數據。引用類似于 Windows 中的快捷方式,一個可執行程序可以有多個快捷方式,通過這些快捷方式和可執行程序本身都能夠運行程序;引用還類似于人的綽號(筆名),使用綽號(筆名)和本名都能表示一個人。
??引用的定義方式類似于指針,只是用&取代了*,語法格式為:
type &name = data;??type 是被引用的數據的類型,name 是引用的名稱,data 是被引用的數據。引用必須在定義的同時初始化,并且以后也要從一而終,不能再引用其它數據,這有點類似于常量(const 變量)。
#include <iostream> using namespace std; int main() {int a = 99;int &r = a;cout << a << ", " << r << endl;cout << &a << ", " << &r << endl;return 0; } 99, 99 0x7ffe457b9a9c, 0x7ffe457b9a9c本例中,變量 r 就是變量 a 的引用,它們用來指代同一份數據;也可以說變量 r 是變量 a 的另一個名字。從輸出結果可以看出,a 和 r 的地址一樣,都是0x28ff44;或者說地址為0x28ff44的內存有兩個名字,a 和 r,想要訪問該內存上的數據時,使用哪個名字都行。
??注意,引用在定義時需要添加&,在使用時不能添加&,使用時添加&表示取地址。如上面代碼所示,第 6 行中的&表示引用,第 8 行中的&表示取地址。除了這兩種用法,&還可以表示位運算中的與運算。
由于引用 r 和原始變量 a 都是指向同一地址,所以通過引用也可以修改原始變量中所存儲的數據,請看下面的例子
#include <iostream> using namespace std; int main() {int a = 99;int &r = a;r = 47;cout << a << ", " << r << endl;return 0; } 47, 47如果讀者不希望通過引用來修改原始的數據,那么可以在定義時添加 const 限制,形式為:
const type &name = value;
也可以是:
type const &name = value;
這種引用方式為常引用
總結
以上是生活随笔為你收集整理的C++引用入门教程(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++字符串详解(三) 字符串的查找
- 下一篇: C++引用作为函数参数