class Bird{
public:
int a;
};
void fn(Bird& obj){
Bird& arrayList[5];
arrayList[0] = obj;
arrayList[0].a = 10;
}
在這裏,在任何的ArrayList更新將不會反映在OBJ對象 我的要求是阻止複製的obj對象的一個例子。數組列表應該引用obj;
請不要使用指針數組伯德
class Bird{
public:
int a;
};
void fn(Bird& obj){
Bird& arrayList[5];
arrayList[0] = obj;
arrayList[0].a = 10;
}
在這裏,在任何的ArrayList更新將不會反映在OBJ對象 我的要求是阻止複製的obj對象的一個例子。數組列表應該引用obj;
請不要使用指針數組伯德
你不能有引用數組。
但是你可以有一個指針數組。 –
@Alexandre C .:我也想補充一點,但是OP不想使用指針數組,「請不要使用指向Bird的指針數組」,所以我對於建議的內容有點遺憾? :) –
我的建議是使用指針數組。如果OP不想使用指針數組,那麼他將無法實現他想要的,期限。 –
建設你使用:
Bird& arrayList[5];
是不允許的。您應該存儲對象本身:
vector<Bird> Birds;
Bird arrayList[5];
或指針
vector<Bird*> Birds;
Bird* arrayList;
這是唯一推薦的選項。
那麼,爲什麼*不參考工作? (試圖刷新一個稍微更徹底的答覆或鏈接。) – 2011-08-05 06:20:00
@pst:我認爲FredOverflow的答案將清除你的問題 –
C++標準對此很清楚(見8.3.2和8.3.4)。簡而言之,數組是對象的序列。參考是而不是的一個對象。因此,你不能有一個引用數組。
(出於同樣的原因,也有來引用或指針引用不引用:引用是對象別名和指針指向對象,但引用不對象本身。)
你需要解釋你爲什麼要這樣做(這個例子很愚蠢 - 爲什麼只有在訪問第一個元素時纔有數組)。由於參考只能被初始化,而沒有被賦值(賦值給被引用的對象,而不是參考),所以這可能不可能。 –
指針正是爲此目的而設計的。當然,當使用原始指針(比如'Bird *')時,您的對象擁有策略必須確保對象(您保留指針)存在。如果你需要共享所有權,那麼你需要某種類型的智能指針(比如'boost :: shared_ptr')。什麼是不使用指針的原因? –