《Effective Modern C++》学习笔记之条款二:理解auto型别推导

首先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推导

猜你喜欢

转载自blog.csdn.net/Chiang2018/article/details/113962166