Ham*_*a.S 4 c++ templates auto
我们有以下代码
auto x = { 11, 23, 9 };
template<typename T> // template with parameter
void f(T param);
f({ 11, 23, 9 }); // error! can't deduce type for T
Run Code Online (Sandbox Code Playgroud)
在此处,以下代码auto会自动推断,而模板不会自动推断.
如何auto推断出类型?
auto幕后的类型是什么?
auto类型推导通常与模板类型推导相同,但auto
类型推导假定支撑初始化器表示a std::initializer_list,而模板类型推导不表示.
当auto使用支撑初始化程序初始化-declared变量时,推导出的类型是实例化的std::initializer_list.但是,如果相应的模板传递相同的初始化程序,则类型推导失败,并且代码被拒绝:
auto x = { 11, 23, 9 }; // x's type is
//std::initializer_list<int>
template<typename T> // template with parameter
void f(T param); // template with parameter
Run Code Online (Sandbox Code Playgroud)
但是,如果您在模板中指定param是std::initializer_list<T>
某个未知T的模板,则模板类型推导将推断出T是什么:
template<typename T>
void f(std::initializer_list<T> initList);
f({ 11, 23, 9 }); // T deduced as int, and initList's
// type is std::initializer_list<int>
Run Code Online (Sandbox Code Playgroud)
记得
- 自动类型推导通常与模板类型推导相同,但自动类型推导假定支撑的初始化程序表示a
std::initializer_list,而模板类型推导则不表示.