首頁  >  文章  >  後端開發  >  具有成員初始值設定項的類別可以在 C 14 中聚合嗎?

具有成員初始值設定項的類別可以在 C 14 中聚合嗎?

DDD
DDD原創
2024-11-09 14:33:02571瀏覽

Can Classes with Member Initializers be Aggregates in C  14?

C 11 具有成員初始化器的類別的聚合初始化

C 11 引入了使用大括號對類別進行聚合初始化,允許為類別指定初始化器所有非靜態資料成員。然而,C 11 中的標準提出了一個問題:類別內成員初始值設定項可以存在於聚合結構中嗎?

在 C 11 中,類別中包含成員初始值設定項會使結構或類別成為非聚合。此限制源自於這樣的信念:類別內成員初始值設定項與使用者定義的建構函數具有相似性。但是,新增成員初始值設定項目不應自動取消類別作為聚合的資格。

C 14 標準解決了此問題,修改聚合類別的定義以僅排除使用者提供的建構子、私有或受保護的非靜態建構子資料成員、基底類別和虛函數。已刪除將成員初始值設定項目作為取消限定符包含在內。

因此,在 C 14 中,如下所示的類別現在被視為聚合:

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; 

在 C 11 中,上述內容程式碼將無效,因為 A 不是聚合。然而,在 C 14 中,程式碼是有效的,並且物件 a 將使用 a = 0 和 b = 1 進行初始化。

g 的最新版本(5.0 及更高版本)現在支援 C 14 的聚合定義:非靜態成員初始值設定項。因此,範例程式碼將使用 -std=c 14 或 -std=c 1y 在 g 中編譯。

以上是具有成員初始值設定項的類別可以在 C 14 中聚合嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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