簡體   English   中英

刪除的構造函數和模板

[英]Deleted constructor and template

考慮以下:

template<typename T>
class A
{
public:
    A(int a)
    {}

    A() = delete;
};

class B
{
public:
    B()
    {
        A<int> a;
    }
};

當然,這段代碼無法編譯,因為 B 類的構造函數試圖默認構造一個 A 類對象,而我已經明確刪除了該構造函數。 一切都很好。

但是,如果我將 B 設為類模板

template<typename T>
class A
{
public:
    A(int a)
    {}

    A() = delete;
};

template<typename T>
class B
{
public:
    B()
    {
        A<int> a;
    }
};

然后代碼確實編譯了,看來我現在可以默認構造 A 類的實例。

為什么是這樣? 我錯過了什么?

謝謝。

哦! 似乎編譯器在嘗試從模板實例化一個類之前不會看到錯誤。

實際上嘗試創建 B<> 類型的對象會產生預期的錯誤。

對不起,如果我浪費了你的時間。

暫無
暫無

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

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