2010-06-24 61 views

回答

6

因爲C是最先發明的。我不知道他們當時是否沒有想過引用(主要是不必要的),或者是否有某些特殊原因不包含引用(可能是編譯器的複雜性)。它們對於面向對象和泛型構造來說肯定比C的過程風格更有用。

1

它們不在C中,因爲它們不是必需的。 C幾乎沒有「多餘的」特徵。你可以在不使用引用的情況下編寫任何程序,所以它們不包含在內。 C++比C開發時間晚了很多,所以它的設計者拋出了C中原本不存在的各種東西。

0

我想C誕生了一個簡約的帽子,引用只是指針的語法糖。

+1

這是一個非常簡單的參考視圖,雖然在技術上(在一個非常低的水平)真正的不是實際的準確描述是什麼參考。 – 2010-06-24 20:08:25

5

參考論證最初是由AFAIK發明的,其中一件事是:運算符重載語義。例如,operator []只需返回一個引用。

然後,當時的「隱藏指針」是否應該用於其他任何事情,這是一個很有爭議的話題。

許多公司的許多開發約定文件都表示「從不使用引用,如果你需要一個指針,就這麼說」。

但是,後來發現參考文獻有一個主要優勢(不,不是語法糖)。這是這樣的:除非你真的很難打破它,否則參考文獻是有效的。

就個人而言,我還是不明白,爲什麼我不能在C++中做到這一點:

int a1, a2; 
int &b = a1; 
&b = a2; // Error. address of referenced is not an lvalue. Why?! 
+0

該代碼沒有意義。第二行嘗試從指針初始化一個整數;第三個嘗試將一個整數分配給一個臨時指針。這兩種都會導致類型不匹配。該錯誤告訴你,你不能分配給臨時;即使你可以,那麼它也不會起作用,因爲臨時性會立即銷燬。你想要做什麼? – 2010-06-24 18:07:12

+0

第三行嘗試分配'b'的地址,它與(試圖將變量'b'重定位到指定地址(某種意義上)相同。我想不出你想要這樣做的情況。如果您需要與特定內存位置相關的變量,請使用「void *」指向內存地址。允許這樣的事情也意味着'&b =&a2'將被允許,這將導致在同一地址處(唯一的)變量「b」和「a2」,這是沒有意義的。任意「移動」這樣一個變量會擾亂編譯器生成的內存偏移。 – bta 2010-06-24 18:12:53

+0

對不起我白癡。固定代碼。請無視你以爲我的意思。 – 2010-06-24 18:28:58

1

正如你可能知道,C早C++大約十年。參考文獻是C++語言中引入的一個功能。 C標準的後續版本已經採用了C++語言的一些特性(如const和//註釋)。引用的概念還沒有到目前爲止。

人們可以推測,他們在面向對象編程的用處不作爲有效轉化爲C.

1

的過程式編程,我想我跟帕維爾的想法,他們發明了使運算符重載正常工作達成一致。很明顯,C++的第一個版本(帶類的C)沒有引用,如果他們這樣做,this將是一個引用而不是指針。