dco*_*con 6 c++ templates c++17
使用 C++17,您可以在 main 中进行类模板参数推导,如下例所示:
template<class T = int>
struct X{};
int main()
{
X myX;
}
Run Code Online (Sandbox Code Playgroud)
为什么数据成员不允许模板参数推导?
template<class T = int>
struct X{};
struct Y
{
X myX;
};
int main()
{
Y myY;
}
Run Code Online (Sandbox Code Playgroud)
错误:在没有参数列表 X myX 的情况下无效使用模板名称“X”;
我没有参与这个决定,但是,我确实看到允许它存在一些问题。让我们假设以下代码:
template<class T = int>
struct X
{
X(T t = T{}) {}
};
Run Code Online (Sandbox Code Playgroud)
这使您的变量仍然可以:
int main()
{
Y myY;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果 Y 有一个在单独文件中实现的构造函数呢?
struct Y
{
Y();
X myX{'a'};
};
Y::Y() : myX{0.0} {}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们是否期望myX是X<int>orX<double>或X<char>?
我可以看到对此可能存在混淆。由于标准委员会无法恢复其决定,因此最好采取确定的一小步,看看人们是否需要它以及他们期望发生的事情。