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

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

Susan Sarandon
發布: 2024-11-29 03:50:13
原創
582 人瀏覽過

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

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

在C 11 中,具有使用者定義構造函數和私有建構函數的結構和類別或受保護的非靜態資料成員不被視為聚合。從歷史上看,具有非靜態成員初始值設定項的類別也是如此,即使它們缺少使用者定義的建構子。

但是,在 C 14 中,此限制被刪除。現在,具有非靜態成員初始值設定項的類別仍然可以是聚合,只要它們滿足聚合的其他要求:

  • 沒有使用者定義的建構子
  • 沒有私有或受保護的非-靜態資料成員
  • 沒有基類
  • 沒有虛擬函數

例如:

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

int main()
{
  A a{0, 1}; // This is now allowed in C++14
  return 0;
}
登入後複製

此更改的動機是希望將聚合初始化的行為與直覺保持一致。類別內初始值設定項本質上等同於使用者定義的建構函數,但阻止類別成為聚合是違反直覺的。

自 G 5.0 起,具有非靜態資料成員初始值設定項的 C 14 聚合已經支援使用 std=c 1y 或 -std=c 14。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板