先講個(gè)小例子:
有個(gè)小孩的名字叫李明,李明小的時(shí)候,父母給他起了個(gè)小名加:狗蛋。等他上學(xué)后,同學(xué)又給他起了個(gè)外號叫二明子。這樣等于他有一個(gè)大名叫,李明。兩個(gè)小名:狗蛋和二明子。如果有天,他的父母喊“狗蛋,去給我打瓶醬油去”,那么實(shí)際上李明就會去了。
很簡單易懂的例子。
好了,開始說引用。
引用就是所綁定對象的一個(gè)別名、小名或者外號。這是最重要的了。
1、引用在定義時(shí)必須要初始化,也就是說在定義時(shí)必須要綁定好這是對那個(gè)對象的別名。相當(dāng)于,你對李明起個(gè)小名,狗蛋。起狗蛋這個(gè)名字的前提是,李明已經(jīng)存在了,要不這個(gè)外號是給誰起的啊?
2、對引用的任何操作,實(shí)際上是對綁定的那個(gè)對象的操作,同樣對原始對象的操作,也就相當(dāng)于對引用的操作,原始對象所屬類型能做什么樣的操作,引用就能做什么,原始對象不能做什么,引用也不能做什么,比如const對象定義后就不能再被賦值了,同樣const引用定義后也就不能再賦值了。相當(dāng)于,讓狗蛋去打醬油(操作),實(shí)際就是李明打醬油,反過來也一樣。同樣李明(男孩)是不能進(jìn)女廁所的,那么狗蛋也是不能進(jìn)去的。
3、一個(gè)對象可以有多個(gè)引用,int cnt=0;int &c=cnt; int &d=cnt; 這也想當(dāng)于,李明可以有多個(gè)外號,一個(gè)是狗蛋一個(gè)是二明子。
所以說要真正的理解引用,只要記住這個(gè)例子就OK了。
另外對于const引用需要注意的是:
const引用可以用非const變量來初始化,而且const引用可以用右值(比如一個(gè)數(shù))初始化,還可以用不同但是類型相關(guān)的對象初始化(比如用double對象初始化int引用)
而非const引用不可以用const對象來初始化,不可以用右值只能用對象來初始化,也只能用嚴(yán)格相同類型的對象初始化。
因此可以看到const引用的用法很靈活,如果沒有要修改原始對象的必要,盡量用const引用