歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++引用與指針的區別

C++引用與指針的區別

日期:2017/3/1 10:02:31   编辑:Linux編程

這幾天看重溫了下《高質量C/C++編程指南》和 《More Effective C++》對於裡面的引用和指針覺得寫得很精辟,同時在網上也找了些別人寫的總結,引用過來大家分享下。

相關鏈接:

高質量程序設計指南C++/C語言(第3版) PDF http://www.linuxidc.com/Linux/2013-01/78612.htm

Effective C++ 中文版第三版 高清PDF http://www.linuxidc.com/Linux/2012-08/67301.htm

雖然使用引用和指針都可以間接訪問另一個值,但他們之間有兩個重要區別:

引用總是指向某個對象,定義引用沒有初始化是錯誤的。

賦值行為的差異,給引用賦值修改的是該引用所關聯的對象的值,而並不是使引用與另一個對象關聯。引用一經初始化,就始終指向同一個特定對象。

★ 相同點:

1. 都是地址的概念;

指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。

★ 區別:

1. 指針是一個實體,而引用僅是個別名;

2. 引用使用時無需解引用(*),指針需要解引用;

3. 引用只能在定義時被初始化一次,之後不可變;指針可變;

引用“從一而終” ^_^

4. 引用沒有 const,指針有 const,const 的指針不可變;

5. 引用不能為空,指針可以為空;

6. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;

typeid(T) == typeid(T&) 恆為真,sizeof(T) == sizeof(T&) 恆為真,但是當引用作為成員時,其占用空間與指針相同(沒找到標准的規定)。

7. 指針和引用的自增(++)運算意義不一樣;

★ 聯系

1. 引用在語言內部用指針實現(如何實現?)。

2. 對一般應用而言,把引用理解為指針,不會犯嚴重語義錯誤。引用是操作受限了的指針(僅容許取內容操作)。

★《高質量C/C++編程指南》6.6

引用是C++中的概念,初學者容易把引用和指針混淆一起。一下程序中,n 是m 的一個引用(reference),m是被引用物(referent)。

int m;
int &n = m;

n 相當於m 的別名(綽號),對n 的任何操作就是對m 的操作。例如有人名叫王小毛,他的綽號是“三毛”。說“三毛”怎麼怎麼的,其實就是對王小毛說三道四。所以n 既不是m 的拷貝,也不是指向m 的指針,其實n就是m 它自己。

Copyright © Linux教程網 All Rights Reserved