總:復合型別
1.1.引用(reference)
c++11中新增了一種引用:所謂的「右值引用」,主要用於內建型別,嚴格來說,當我們使用術語「引用」時,指的其實是「左值」引用。
引用是為物件起了另外乙個名字,引用型別引用另外一種型別。假設d是宣告的變數名:
int ival = 1024;
int &refval = ival; //refval 指向 ival (是 ival的另外乙個名字);
int &refval2; //絕對錯誤,引用必須要初始化;
關於為什麼必須初始化:一般在初始化變數時,初始值會被拷貝到新建德爾物件中。然而定義引用時,程式把引用和它的初始值繫結在一起,而不是把初始值拷貝給引用,一旦初始化完成,引用將和它的初始值物件一直繫結在一起。因為無法令引用重新繫結到另外乙個物件,因此引用必須初始化。
引用即別名:
引用並非物件,相反的,它只是乙個已經存在的物件所起的另外乙個名字。定義了引用之後,對其進行的所有操作都是在與之繫結的物件上進行的:
int ival = 1024;
int &refval = ival; //refval 指向 ival (是 ival的另外乙個名字);
refval = 2; //把2賦給refval 指向的物件,此處就是賦給了ival;
int ii = refval; //這和 ii = ival 等價;
為引用賦值,實際就是把值賦給了與引用繫結的物件。獲取引用的值,實際是獲取了與引用繫結的物件的值。同理,以引用作為初始值,實際上是以引用繫結的物件作為初始值。
引用本身不是物件,所以一定不能定義引用的引用;
引用的定義:
允許在一條語句中定義多個引用,其中每個引用都必須以&開頭,引用只能繫結在物件上,而不能與字面值或者哪個表示式的結果繫結在一起:
int &refval4 = 10; //錯誤,引用型別的初始值必須是乙個物件
double dval = 3.14;
int &refval = dval; //錯啦,對應起來,這裡引用的型別的初始值必須是 int 型
一般情況下:所有引用的型別都要和與之繫結的物件嚴格匹配。但是,不一般的情況下,有兩種例外:
例外一:
在初始化常量引用時,允許任意表示式作為初始值,只要該表示式的結果能轉換成引用的型別即可;尤其是允許為乙個常量引用繫結非常量的物件、字面值,甚至是乙個一般表示式:
int i = 12;
const int &r1 = i; //允許將 const int & 繫結到乙個普通int 物件上;
const int &r2 = 12; //正確:r1 是乙個常量引用;
const int &r3 = r1*2; // 正確:r3 是乙個常量引用;
int & r4 = r1*2; //錯誤:r4只是乙個普通的非常量引用;
當 double dval = 3.14;
const int& ri = dval; 發生了如下的轉換:
const int temp = dval;
const int& ri = temp;
例外二:
存在繼承關係的類:此處見後來博文:
售前考題之一 引用
原來題目如下 題目 說北京某家樂福地下超市老闆問你乙個問題,他說 我們家樂福,每天有許多人進進出出,每天的營業額在200來萬,你知道嗎,我問你乙個問題,除了看每天的財務報表以外,你如何計算我每天的營業額,我可以告訴你,平均每個顧客的購物在95元,每天營業時間為12小時,這個平均是2個月以來的平均數,...
5 0 引用型別
ecmascript中有5中簡單資料型別 也叫基本資料型別 undefined boolean null number string。還有一種複雜資料型別 object object本質上是一組無序的明值対組成的 1 應用型別的值 物件 是引用型別的乙個例項。2 在es種,引用型別是一種資料結構,用...
C Primer學習之一引用和指標
引用是一種復合型別,引用分為左值引用和右值引用,其中右值引用時c 11提出來的,常說的引用其意為左值引用。注意 引用不是物件,它是乙個物件 變數 的別名,不能改變引用的物件,故必須在初始化的確定引用的物件。引用的型別必須和被引用變數的型別一致,但有兩種例外情況。const引用 double dval...