C 引用小結

2022-05-18 13:42:09 字數 1190 閱讀 4032

從之前的部落格中有提到,c++有兩種特性

return by value   and   return by reference

一種是返回值,一種是返回引用

並且,在一般情況下,傳引用比傳值效率更高。

先說說引用是什麼,引用用的是&符號,&符號既可以用來當引用,也可以用來當取位址符,只不過使用方法不同。

引用的本質是別名。

引用的基本使用方法是

int b = 1

;int & a = b;

此時a就是b的引用,也就是b的別名,那可能會發現乙個問題,我為什麼不直接用b,而去特意建立乙個別名去使用b呢。

這裡去思考一下typedef的作用就知道了。

我們可以用它來接收返回值,並且建立引用

inline complex&__doaml (complex* ths, const complex&r)

傳遞者是*ths,是乙個「實體」,而接收者是 complex& , 也就是乙個引用,其實這裡也可以直接接收值,但如果之後還要使用*ths,這裡的用引用接收之後使用,效率會快上很多。

(可以把這整個函式想象成返回了乙個 *ths 的引用)

引用和指標是差不多的,因為

t& ... = t* const ...  指標無法改變

const t& ... = const t* const ... 指標無法改變,指標指向的值也無法改變

所以引用就是乙個不能改變指向的指標,傳遞的也是位址。

並且引用能夠解決 派生類切割問題。

比如說有兩個類

class

person ;

class student: public

person ;

...void

printattribute(person p)

...//

假設student s;

printattribute(s);

當派生類物件s 傳入到 printattribute()裡去後,會切割掉自己原本有的屬性,變成乙個原原本本的基類,此時將沒有classid這個屬性。

如果傳的是引用,則可以解決這個問題。

void printattribute(const person&p)

這樣 p 的行為就和傳入到函式的真實型別一致了。

C 引用小結

引用的本質就是給同乙個記憶體空間起不同的名字 include using namespace std int main 引用必須要進行初始化 include using namespace std 引用的基本基本知識 void myswap int a int b int main 這種函式是萬萬要...

c 引用小結

在c 中引用方式為 int c a 引用的本質為 int const c a 因此c本質是個指標常量,且其指標指向不可變。因此在有些需要傳遞某種資料型別的指標時,可以用引用的方式傳遞。引用的第二種方式,就是系統會自動對引用變數進行解引用取值操作 例如 int c a c 100 c 100int c...

C 引用的小結

一 引用的概念 例如 point pt1 10,10 point pt2 pt1 定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一物件。需要特別強調的是引用並不產生物件的副本,僅僅是物件的同義詞。因此,當下面的語句執行後 pt1.offset 12,12 pt1和pt2都具有 12...