程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 明確C++中引用的本質

明確C++中引用的本質

編輯:關於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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved