[英]using default constructor in constructor inheritance
我有一個模板類“ Derived”,它可以進行構造函數繼承:
template <class T>
class Derived : public T
{
using T::T;
Derived()
{
std::cout<<"in derived";
}
};
我的基類有一個需要參數的構造函數:
class Base
{
public:
Base(int a)
{
std::cout<<"in base";
}
};
當我創建派生類型的對象時,派生構造函數似乎沒有被調用:
Derived<Base> derived(2);
打印“基礎”;
為什么? 有沒有辦法告訴它調用派生構造函數?
繼承的構造函數進行的初始化如下:
[class.inhctor.init] (強調我的)
1當調用類型B的構造函數初始化不同類型D的對象時(即,繼承該構造函數時), 初始化將繼續進行,就好像使用默認的默認構造函數來初始化D對象和來自該對象的每個基類子對象一樣構造函數是繼承的,除了B子對象是通過調用繼承的構造函數初始化的 。 完整的初始化被認為是單個函數調用。 特別是,在初始化D對象的任何部分之前,先對繼承的構造函數的參數進行初始化。
關鍵是默認單詞。 默認的c'tor由編譯器生成,例如,副本c'tor可以默認。 因此,它不使用派生類中定義的任何c'tor。 編譯器生成的c'tor總是會有一個空的復合語句。 因此,不應期望會打印任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.