Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有可能有一个像';模板<;T级>;X(){}';? struct X{ 模板 X(){} };_C++_Templates_Constructor - Fatal编程技术网

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(){}
};