簡體   English   中英

聚合非POD類類型的初始化?

[英]Aggregate initialization of non-POD class types?

在ISO C ++中聚合初始化非POD類類型是否合法?

例如,如果我們有一個帶有單個方法的結構,例如:

struct T
{
   operator double();

   int a;

   int b;
} ;

然后我們初始化它的一個實例:

T tObj { 56, 92 };

使用聚合初始化。 這合法嗎?

在Clang 3.7下,它可以很好地編譯,但是在VC ++ 15 CTP 3中則不能。

對這個問題有什么見解,並請引用標准嗎?

您可以聚合初始化任何聚合,無論它是否是POD。 C ++ 11因此定義了一個聚合:

[dcl.init.aggr] 聚合是一個數組或一個類,沒有用戶提供的構造函數,沒有用於非靜態數據成員的花括號或相等初始化器,沒有私有或受保護的非靜態數據成員,沒有基類,並且沒有虛擬功能

並且您的班級符合該描述。

C ++ 14放寬了對聚合的限制,刪除了“對於非靜態數據成員,不使用括號或相等的初始化程序”; 不會影響這個問題。

請注意,您的課程也是POD; 僅僅擁有一個成員函數並不能取消其資格。 但是成為POD在很大程度上與它是否是聚合無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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