C++ 对句子的混淆;任何模板参数既没有推导也没有明确指定,模板参数推导失败。”;
在某些情况下,使用一组类型p和a进行推断,在其他情况下,将有一组对应的类型p和a。对每个p/a对分别进行类型推断,然后组合推断出的模板参数值。如果无法对任何P/A对进行类型推断,或者如果对任何对进行类型推断会导致多个可能的推断值集,或者如果不同的对产生不同的推断值,或者如果任何模板参数未被推断或明确指定,则模板参数推断将失败 考虑上面的句子,C++ 对句子的混淆;任何模板参数既没有推导也没有明确指定,模板参数推导失败。”;,c++,templates,language-lawyer,C++,Templates,Language Lawyer,在某些情况下,使用一组类型p和a进行推断,在其他情况下,将有一组对应的类型p和a。对每个p/a对分别进行类型推断,然后组合推断出的模板参数值。如果无法对任何P/A对进行类型推断,或者如果对任何对进行类型推断会导致多个可能的推断值集,或者如果不同的对产生不同的推断值,或者如果任何模板参数未被推断或明确指定,则模板参数推断将失败 考虑上面的句子,模板参数属于谁?它是指类型P源自的模板的模板参数,还是指类型P命名的模板的模板参数?通过阅读这个句子,我无法确定它指的是哪一个 模板 结构测试{}; 模板
模板参数
属于谁?它是指类型P
源自的模板的模板参数,还是指类型P命名的模板的模板参数?通过阅读这个句子,我无法确定它指的是哪一个
模板
结构测试{};
模板
void func(Test){}
int main(){
func(Test{});
}
问题1
换句话说,上面句子中的模板参数
是指函数模板func
或类模板Test
的参数?两个模板都需要模板参数
来形成专门化
问题2
如果模板参数
引用类模板测试
,即对于P/A对,即
Test
/Test
,该过程将T
与char
进行比较,然后T
的推导值为char
,因为P
的模板参数列表中没有任何其他Pi
,因此没有其他可推导的内容。对参与模板参数推导的每个Pi
执行推导后,第二个模板参数Test
保留无模板参数,其值既不是推导的
也不是明确指定的
,模板参数从默认参数
中获取,因此,强调的段落不包括这种情况吗?(从默认参数获取意味着获取模板参数值的方法既不是通过推导,也不是明确指定的方法。那么扣减会失败吗?我认为它没有失败。如果我误解了什么是模板参数推断成功,请指出。“…从使用中推断或从默认模板参数中获得”。如果模板参数是默认的模板参数,则它不能被扣除。@nicolai你的意思是[temp.Decrete]中的规则是对所有扣除规则的补充吗?@nicolai听起来好像适用于所有类型的扣除的替换,但是很清楚地说“任何模板参数都不会被推导或明确指定,也不会从默认参数获取,模板参数推导失败。”“,您同意吗?我认为默认模板参数不需要进行任何推断,因此我们不能说推断失败。@nicolai是的,默认模板参数不需要进行任何推断
,因此模板参数既不进行推断,也不显式指定。”