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