首頁 >後端開發 >C++ >數組可以在建構函式的成員初始化列表中初始化嗎?

數組可以在建構函式的成員初始化列表中初始化嗎?

DDD
DDD原創
2024-11-18 11:21:02490瀏覽

Can Arrays Be Initialized in a Constructor's Member Initializer List?

建構函式中的成員陣列初始化

考慮下列C 類別:

class C {
public:
    C() : arr({1, 2, 3}) {}
    // C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

程式碼嘗試初始化函數的成員初始值設定項清單中的陣列成員。但是,它無法編譯。

問題:

  1. 是否可以在建構子的成員初始值設定項清單中初始化陣列?
  2. C 03 標準對此情況有何規定?
  3. C 11 列表初始化是否解決了這個問題問題?

答案:

1.建構函式中的陣列初始化

是的,可以在建構函式的成員初始值設定項清單中初始化陣列。但是,它需要一個中間結構:

struct A {
    int foo[3];
    A(int a, int b, int c) : foo{a, b, c} {}
};

class C {
public:
    C() : foo(A(1, 2, 3)) {}
private:
    A foo;
};

2。 C 03 標準

C 03 標準並未明確解決成員初始值設定項清單中陣列的初始化。但是,直接初始化的一般規則禁止使用大括號初始化陣列。

3. C 11 列表初始化

C 11引入了列表初始化,它允許使用大括號直接初始化數組:

class C {
public:
    C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

在這種情況下,直接在數組名稱後面使用大括號的語法有效並在構造函數的成員初始值設定在項目列表中初始化數組。

以上是數組可以在建構函式的成員初始化列表中初始化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn