在已經涼了的字節面試中被問到,為什么 C++ 有指針了還要引用?
的確,引用的底層也是指針實現的,引用和指針在編譯結束之后匯編指令是一樣的,引用會占用和指針相同大小的數據空間。
引用傳遞,只是明面上,沒有使用值傳遞,值傳遞本身是不可避免的。編譯器,暗地里通過指針(或者其他可以替代指針的數據類型)的值傳遞,替換了引用傳遞。
引用能實現的基本上指針都可以實現,那為什么C++還需要引入引用呢?
先說結論:直接的原因是為了支持運算符重載
下面看看C++之父Bjarne Stroustrup是怎么說的吧:
也就是說,假設沒有引用,那么,用指針來operator overloading操作。
A operator +(const A *a, const A *_a);
那么使用的時候,&a + &b,這樣看起來是不是很難受。
除此之外,
用指針的使用經常犯得錯:1,操作空指針,2,操作野指針,3,不知不覺改變了指針的值,而后還以為該指針正常。如果我們要正確的使用指針,我們不得不人為地保證這三個條件。而引用的提出就解決了這個問題。
引用區別於指針的特性是 :1,不存在空引用(保證不操作空指針),2,必須初始化(保證不是野指針),3,一個引用永遠指向他初始化的那個對象(保證指針值不變)。
參考鏈接: