在c語言中我們習慣在某些場景下用指標操作,可是指標操作雖然靈活也有很多的風險,而且指標操作偏底層,對於物件導向的語言來說不是很方便,c++中我們用引用來替代指標的部分操作。
引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。
定義的格式為: 型別 &引用變數名 = 已定義過的變數名;
引用的特點:
乙個變數可取多個別名
引用必須初始化
引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。
在c++中有三種引數傳遞方式,分別為值傳遞,指標傳遞與引用陳傳遞
值傳遞:值傳遞是生成乙個臨時變數將實參的值拷給形參,所以有可能會多一次拷貝構造,而且在函式結束後**棧幀會將形參收回,所以除了作用域,並不會改變實參。
指標傳遞:指標傳遞是傳給函式實參的指標,通過指標變數來操作實參,這樣倒是可以避免出了作用域實參不會改變的問題,可是指標操作會有很多風險,類似野指標等問題,對於物件導向的語言很不友好。
引用傳遞:引用做引數可以避免出了作用域實參不改變的問題,同時也沒有指標的風險,所以我們一般在c++中用引用傳遞,為了避免我們無意修改引數,一般引用傳遞配合const使用。
在c中我們有很多場景用指標做返回值,可是在c++中,我們的返回值型別一般用引用,首先引用傳遞少了一層拷貝構造,相對於指標做返回值來說又少了指標操作的風險。
不過我們需要注意的是,在用引用做返回值的時候,一定要確保出了函式這個返回物件依舊存在,如果被棧幀**那麼會陷入死迴圈。
總結一下
不要返回乙個臨時變數的引用。
如果返回物件出了當前函式的作用域依舊存在,則最好使用引用返回,因為這樣更高效。
引用只能在定義時初始化一次,之後不能改變指向其它變數(從一而終);指標變數的值可變。
引用必須指向有效的變數,指標可以為空。
sizeof指標物件和引用物件的意義不一樣,sizeof引用得到的是所指向的變數的大小,而sizeof指標是物件位址的大小。
指標和引用自增(++)自減(–)意義不一樣。
相對而言,引用比指標更安全。
指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...
指標和引用
一 先看一段 include using namespace std void freeptr1 int p1 void freeptr2 int p2 void main 思考 在 freeptr1 和freeptr2 的比較中,你能發現它們的不同點嗎?二 對 進行解釋 include using...
指標和引用
指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...