[英]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.