簡體   English   中英

在對象數組上復制構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM