簡體   English   中英

繼承構造函數不允許類似數組的初始化

[英]inheriting constructors doesn't allow array-like initialization

這是g ++錯誤嗎?

#include <array>

struct inherit : std::array<int , 3>{
    using std::array<int , 3>::array;
};

std::array<int, 3> ok1 = {1,2,3};
inherit ok2;
inherit bad = {1,2,3};

實例化bad ,我得到error: could not convert '{1, 2, 3}' from '<brace-enclosed initializer list>' to 'inherit' 在我看來,這絕對正確。

std::array是一個聚合。 它沒有用戶定義的構造函數。

從C ++標准

1集合是沒有用戶提供的構造函數(12.1),沒有私有或受保護的非靜態數據成員(第11章), 沒有基類 (第10章),也沒有虛函數的數組或類(第9章) 10.3)。

類繼承不是聚合,因為它具有基類。 因此,它可能不使用括號初始化(空的初始化列表除外)。 如果您要使用非空的初始化列表進行初始化,則應為類繼承明確定義構造函數,

暫無
暫無

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

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