在建構子初始值設定項清單中初始化陣列成員
C 提供了在建構函式中使用成員初始值設定項列表來初始化類別成員的功能。但是,以這種方式初始化數組成員可能會遇到編譯錯誤。
下面的程式碼片段示範了嘗試在建構函式初始值設定項清單中初始化陣列成員,但無法編譯:
class C { public: C() : arr({1,2,3}) { // doesn't compile } /* C() : arr{1,2,3} // doesn't compile either } */ private: int arr[3]; };
這個問題的原因在於初始化陣列的限制。陣列只能透過賦值語法('=')初始化,如下例所示:
int arr[3] = {1,3,4};
問題與解答:
1 。如何在建構函數初始值設定項列表中初始化陣列?
要在建構子初始值設定項清單中初始化數組,必須使用包含該數組作為成員變數的結構:
struct ArrStruct { int arr[3]; ArrStruct() : arr{1,2,3} { } }; class C { public: C() : arr_struct(ArrStruct()) { } private: ArrStruct arr_struct; };
這種方法涉及創建一個單獨的結構來保存數組,然後在結構體中初始化該結構構造函數。
2. C 03 標準與陣列初始化
C 03 標準沒有明確解決構造函數初始值設定項清單中聚合(包括陣列)的初始化。原始範例中程式碼的無效性源自於禁止透過初始化清單直接初始化聚合的一般規則。
3. C 11 列表初始化
C 11 列表初始化提供了這個問題的解決方案。但是,原始問題中的語法不正確。正確的語法是:
struct A { int foo[3]; A() : foo{1, 2, 3} { } };
使用大括號直接觸發 C 11 的列表初始化功能。
以上是可以在 C 建構函數初始值設定項清單中初始化陣列嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!