C++ 有没有可能有一个像';模板<;T级>;X(){}';? struct X{ 模板 X(){} };
可以实例化这样的类型吗?是的,可以有这样的构造函数,但不可能调用它。模板化构造函数的所有模板参数必须从参数列表中推导出来,或者具有默认值。在您的示例中,无法实例化该类 [临时成员] [注意:由于显式模板参数列表紧跟函数模板名称, 因为转换成员函数模板和构造函数成员函数模板被调用 如果不使用函数名,就无法为这些函数提供显式的模板参数列表 函数模板。-结束注释]C++ 有没有可能有一个像';模板<;T级>;X(){}';? struct X{ 模板 X(){} };,c++,templates,constructor,C++,Templates,Constructor,可以实例化这样的类型吗?是的,可以有这样的构造函数,但不可能调用它。模板化构造函数的所有模板参数必须从参数列表中推导出来,或者具有默认值。在您的示例中,无法实例化该类 [临时成员] [注意:由于显式模板参数列表紧跟函数模板名称, 因为转换成员函数模板和构造函数成员函数模板被调用 如果不使用函数名,就无法为这些函数提供显式的模板参数列表 函数模板。-结束注释] 你错过什么了吗。无法从构造函数返回?拒绝@ybugalobill GCC4.3的可能重复项是不正确的X::X引用X的构造函数,并且将向它们
你错过什么了吗。无法从构造函数返回?拒绝@ybugalobill GCC4.3的可能重复项是不正确的
X::X
引用X
的构造函数,并且
将向它们传递模板参数列表,过滤掉构造函数模板。这可能是因为这是一个很晚才添加的内容,并且没有将其加入到C++03中。不,这就变成了C++03。@ybungalobill,如果你觉得有必要与J S-litb争论的话。请带上你最大的枪。(在写这篇愚蠢的评论时没有企鹅受到伤害)@Johannes首先,你可以引用一些东西,表明X::X
中的第二个X
是构造函数的名称。我所发现的(即时)是§12.1/1,上面写着“施工人员没有名字。”我很想知道§5中涉及的施工;我找到的唯一一个是§5.2.3,它将(
左侧的元素视为“简单类型说明符”,而不是函数(或构造函数)的名称)。@Johannes你是说“构造函数没有名称”这并不意味着它说了什么?我们怎么知道呢?标准中有没有其他语句不是他们说的意思?如果构造函数没有名称,为什么它们的名称与注入的类名不冲突?@Johannes至于§3.4.3,我不认为有任何疑问,给定X::X
,第二个X
wi将在类X
的范围中查找。其中,类名注入将导致它找到类的名称。这意味着我们回到了开始的位置。并且X::X
是非法的,因为类X
不是模板。
struct X{
template<class T>
X(){}
};