簡體   English   中英

C++17 默認模板參數:無效使用沒有參數列表的模板名稱

[英]C++17 Default template arguments: invalid use of template-name without an argument list

使用 C++17,您可以在 main 中進行類模板參數推導,如下例所示:

template<class T = int>
struct X{};

int main()
{
    X myX;
}

為什么數據成員不允許模板參數推導?

template<class T = int>
struct X{};

struct Y
{
   X myX;
};

int main()
{
   Y myY;
}

錯誤:在沒有參數列表 X myX 的情況下無效使用模板名稱“X”;

我沒有參與這個決定,但是,我確實看到允許它存在一些問題。 讓我們假設以下代碼:

template<class T = int>
struct X
{
    X(T t = T{}) {}
};

這使您的變量仍然可以:

int main()
{
     Y myY;
}

但是,如果 Y 有一個在單獨文件中實現的構造函數呢?

struct Y
{
    Y();
    X myX{'a'};
};

Y::Y() : myX{0.0} {}

在這種情況下,我們是否希望myXX<int>X<double>X<char>

我可以看到對此可能存在混淆。 由於標准委員會無法恢復其決定,因此最好采取確定的一小步,看看人們是否需要它以及他們期望發生的事情。

暫無
暫無

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

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