首先auto型别推导与模板型别推导完全相同,唯一的区别是在对大括号括起来的表达式进行推导时,auto会将其推导为一个std::initializer_list的类型。代码示例如下:
auto x1 = 27; //x1型别为int
auto x2(27); //x2型别为int
auto x3 = {27}; //x3型别为std::initializer_list<int>
auto x4{27}; //x4型别为std::initializer_list<int>
auto x5 = {27,13,0.5}; //x5型别无法推导,编译报错,因为里面包含两种数据类型
要点速记
- auto型别推导与模板型别推导完全相同,唯一的区别是在对大括号括起来的表达式进行推导时,auto会将其推导为一个std::initializer_list的类型。
- 在函数返回值或lambda表达式返回值中使用auto,将会使用模板推导,而非auto推导