自动扣除和模板类型扣除有什么区别?

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幕后的类型是什么?

Ham*_*a.S 7

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,而模板类型推导则不表示.

  • @PW编辑报价格式然后忽略plagiariser.无法看到聊天方式实现任何目标.IME这是一种文化的东西(直到你在SE发布,然后你受到政策和合法性的约束) (2认同)