我有這樣簡單的代碼:指針和參考棘手的代碼
int a = 1, b = 2;
int* c[] = {&a,&b};
int& d[] = {a,b};
int x = *c[0]+d[1];
如果下面的作品
int &d = a;
我無法理解爲什麼線3和4產生一個錯誤。 :-s
這真的是沒有意義的我:(
我有這樣簡單的代碼:指針和參考棘手的代碼
int a = 1, b = 2;
int* c[] = {&a,&b};
int& d[] = {a,b};
int x = *c[0]+d[1];
如果下面的作品
int &d = a;
我無法理解爲什麼線3和4產生一個錯誤。 :-s
這真的是沒有意義的我:(
int& d[] = {a,b};
不能創建引用數組它不是由C++ Standard.For它允許讓整個類型的機制會。已被重新寫入。
int x = *c[0]+d[1];
給你一個錯誤,因爲編譯器不能做出來的類型d
,因爲有你在哪裏申報d
前行編譯錯誤。
B b[2];
創建B
類型的兩個對象調用因此兩次B()
。
b[1]=D();
創建D
類型的對象。爲此它調用類本身和其基類的構造函數,從而導致調用B()
和D()
。創建的對象存儲在數組索引1
。然而,由於陣列類型爲B
Object Slicing發生並且對象的所有派生成員被切掉。從本質上講,在b[1]
對象現在是該類型的B
b[1].print();
呼叫print()
方法對象類型B
(以上爲什麼它是類型見說明B
)
問題#1
int& d[] = {a,b};
您不能創建一個引用數組。數組包含對象。實例,基元和指針是對象。參考不是。
問題#2,由於問題的改變,回答消失。
第一部分參見Als的回答。第二部分:
如果你要問兩個問題,然後隨時免費二級菌種2個不同的線程。它在SO中是免費的。只是交叉檢查它是否被詢問過。 – iammilind
@iammilind:我繼續前進,並刪除第二個問題和引用「繼承」。無論如何,我都很喜歡它,因爲它會不時出現。 –
@MatthieuM .:現在我的答案的第二部分沒有意義。 :( –