C++ 模板空括号初始化演绎
我认为模板函数可以有默认参数(不是模板参数而是运行时参数)。我们还可以使用空括号初始化类。但是编译器如何匹配模板呢 这段代码为什么要编译,编译器如何进行演绎,以及这个函数调用示例中的参数是什么 据我所知: 默认括号初始化调用空构造函数,该构造函数是隐式创建的,因为没有用户定义的构造函数或用户定义的默认构造函数。也就是说,我们可以用{}初始化任何包。。因此,扣除额不适用于此,因为我们不能选择一个包,每个包都是候选包。可能默认的变量模板参数是(无参数)C++ 模板空括号初始化演绎,c++,templates,template-argument-deduction,C++,Templates,Template Argument Deduction,我认为模板函数可以有默认参数(不是模板参数而是运行时参数)。我们还可以使用空括号初始化类。但是编译器如何匹配模板呢 这段代码为什么要编译,编译器如何进行演绎,以及这个函数调用示例中的参数是什么 据我所知: 默认括号初始化调用空构造函数,该构造函数是隐式创建的,因为没有用户定义的构造函数或用户定义的默认构造函数。也就是说,我们可以用{}初始化任何包。。因此,扣除额不适用于此,因为我们不能选择一个包,每个包都是候选包。可能默认的变量模板参数是(无参数) 模板类包{}; 模板 内联自动生成(包={})
模板类包{};
模板
内联自动生成(包={}){
}
int main(){make();}
(用通用条款汇编)
注意:我认为不是,但默认参数可能有用:调用函数的两种方法:makemake()
,导出的参数
为空<代码>生成()代码>与make()具有相同的效果代码>在这种情况下
模板参数是,此处不提供模板参数。请注意,函数默认参数不参与。然后,Args
被推断为空
如果参数包显示为最后一个p,则类型p与调用的每个剩余参数的类型a相匹配。每个匹配项都会推断包扩展中下一个位置的模板参数:
无法从函数默认参数的类型推断类型模板参数:
make()代码>与make()具有相同的效果
通常(不适用于OP的情况),make()
是否排除非模板make
函数?
template<typename...> class pack {};
template<class... Args>
inline auto make(pack<Args...> = {}) {
}
int main() { make(); }