[英]Copy constructor on array of objects
class Base
{
public:
int i;
Base(int j):i(j){}
};
int main()
{
Base B(10);
Base C[10](B);//throws error saying bad array initializer
}
當我嘗試編譯此代碼時,拋出了上述錯誤。
C ++為什么不編譯此代碼?
為什么每個對象都不能調用它的默認副本構造函數並使用B的成員值?
我是否缺少C ++標准中的某些內容?
Base C[10](B);
這在C ++中是錯誤的語法。 您不能通過傳遞參數來初始化普通對象數組。
Base C[10];
也不會工作。 您還需要聲明一個默認構造函數,因為您指定了一個將int作為輸入的構造函數,因此不會生成默認構造函數。
至於我,我看不出這種構造的任何原因
Base C[10](B);
或例如以下
Base *C = new Base[10]( 8 );
無效。 它僅取決於您要如何定義語義。
但是,從歷史上看,在C ++中初始化聚合時,使用了brace-init列表。
所以你可以寫
Base C[10]{ B, 8, 8, 8, 8, 8, 8, 8, 8, 8 };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.