回答
因爲C是最先發明的。我不知道他們當時是否沒有想過引用(主要是不必要的),或者是否有某些特殊原因不包含引用(可能是編譯器的複雜性)。它們對於面向對象和泛型構造來說肯定比C的過程風格更有用。
它們不在C中,因爲它們不是必需的。 C幾乎沒有「多餘的」特徵。你可以在不使用引用的情況下編寫任何程序,所以它們不包含在內。 C++比C開發時間晚了很多,所以它的設計者拋出了C中原本不存在的各種東西。
我想C誕生了一個簡約的帽子,引用只是指針的語法糖。
參考論證最初是由AFAIK發明的,其中一件事是:運算符重載語義。例如,operator []只需返回一個引用。
然後,當時的「隱藏指針」是否應該用於其他任何事情,這是一個很有爭議的話題。
許多公司的許多開發約定文件都表示「從不使用引用,如果你需要一個指針,就這麼說」。
但是,後來發現參考文獻有一個主要優勢(不,不是語法糖)。這是這樣的:除非你真的很難打破它,否則參考文獻是有效的。
就個人而言,我還是不明白,爲什麼我不能在C++中做到這一點:
int a1, a2;
int &b = a1;
&b = a2; // Error. address of referenced is not an lvalue. Why?!
該代碼沒有意義。第二行嘗試從指針初始化一個整數;第三個嘗試將一個整數分配給一個臨時指針。這兩種都會導致類型不匹配。該錯誤告訴你,你不能分配給臨時;即使你可以,那麼它也不會起作用,因爲臨時性會立即銷燬。你想要做什麼? – 2010-06-24 18:07:12
第三行嘗試分配'b'的地址,它與(試圖將變量'b'重定位到指定地址(某種意義上)相同。我想不出你想要這樣做的情況。如果您需要與特定內存位置相關的變量,請使用「void *」指向內存地址。允許這樣的事情也意味着'&b =&a2'將被允許,這將導致在同一地址處(唯一的)變量「b」和「a2」,這是沒有意義的。任意「移動」這樣一個變量會擾亂編譯器生成的內存偏移。 – bta 2010-06-24 18:12:53
對不起我白癡。固定代碼。請無視你以爲我的意思。 – 2010-06-24 18:28:58
正如你可能知道,C早C++大約十年。參考文獻是C++語言中引入的一個功能。 C標準的後續版本已經採用了C++語言的一些特性(如const和//註釋)。引用的概念還沒有到目前爲止。
人們可以推測,他們在面向對象編程的用處不作爲有效轉化爲C.
的過程式編程,我想我跟帕維爾的想法,他們發明了使運算符重載正常工作達成一致。很明顯,C++的第一個版本(帶類的C)沒有引用,如果他們這樣做,this
將是一個引用而不是指針。
- 1. 引號中的變量C++
- 2. 引用C#JavaScript中的變量
- 3. C++中的存儲引用變量
- 4. ReadOnly C#類中的引用變量
- 5. C#變量引用混亂
- 6. C#引用成員變量
- 7. 在C代碼中引用BASH變量
- 8. 引用JMeter中變量的變量
- 9. 引用變量中的變量 - 哈希?
- 10. 使用變量引用C#中的數組索引
- 11. 從'C'程序中提取變量定義和變量引用
- 12. C++「引用返回的本地變量」
- 13. Objective-c引用塊之外的變量
- 14. 使用索引C的循環變量#
- 15. LDNS:未定義的變量引用(C++)
- 16. 引用Java中的變量?
- 17. java中的引用變量
- 18. java中的引用變量
- 19. 引用變量
- 20. 變量引用
- 21. 引用變量
- 22. 引用變量
- 23. 關於引用變量和C#中的變量傳遞的簡單問題
- 24. C#:通過變量引用類
- 25. 重新分配C++引用變量
- 26. 改建引用變量在C++
- 27. 引用變量不返回值在c + +
- 28. C#通過變量引用方法?
- 29. 初始化引用和變量在C++
- 30. 未定義引用靜態變量C++
這是一個非常簡單的參考視圖,雖然在技術上(在一個非常低的水平)真正的不是實際的準確描述是什麼參考。 – 2010-06-24 20:08:25