C++中引用的本質是什么?


一般的教材上講到引用時,都是說“引用是對象的一個別名”。我認為這種定義是不清晰的,不利於初學者理解引用。至少我自己曾經被這個定義困擾了一段時間。到底什么是“別名”?

    實際上,引用的實質是位於xxxxxx地址上的一個xxxx類型的對象。比如教科書上常用的例子:

    int a = 5;           //不妨假設編譯器將a分配到0x400000

    int &b = a;

    這里面b的准確意義就是,放在0x400000地址上的一個int類型對象。這里面包括了兩重含義,首先b是一個int類型對象,因此他的使用完全與 int類型對象一樣。另外這個int類型對象的地址是0x400000,因此從底層來看,它具有指針的一些特性,無論你怎樣傳遞,他都代表放在 0x400000的那個int.

    在c++中,引用全部是const類型,定義之后不可更改。實際上“引用”對目標代碼來說是不存在的,因為對於編譯器來說,使用上例中的b就是使用 0x400000地址的那個int.引用一經定義,就不會指向別的地址,也不會指向別的類型,因此編譯器不會專門開辟空間存儲這個引用,而是將發送引用的地方替換為真正的地址,接收引用的地方則替換為接受指針

    在java中,數據對象也都是引用類型,但是這里的引用與C++有很大不同,他們不是const類型,可以指向一個空值,也可以隨時更改其指向的內存地址。這實際上與C++中的指針概念完全對應。java中的引用實際上對應C++中的指針而非引用,只不過是省去了C++中指針的取地址(&)與取值(*)操作。

 

指針和引用的區別?

 

(1)引用在創建時必須初始化,指針可以不初始化,引用不可以為NULL指針可以。 (2)不存在指向空值的引用,但是存在指向空值的指針。 (3)引用初始化后不能被改變,指針可以改變所指的對象.

 

來源:http://c.chinaitlab.com/cc/basic/200905/783891.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM