effective modern C++笔记 第二章

1. auto类型推导与模板类型推导的相同点

template<class T>
void func(ParamType param);

func(expr);

Type x = expr;

Type类型在包含auto的时候,本质上Type和ParamType是一样一样的,而auto就对应着模板类型T。
由上一小节可以推断出:

//auto&在识别类型的时候,auto为等号右边对象的类型去掉&;
const int y = 1;
const int& z = y;
auto& x = y;        //x为const int&,auto为const int;
auto& x = z;        //x为const int&,auto为const int;

//auto&&在识别类型的时候,符合引用折叠类型
int y = 10;
auto&& x = y;      //x为int&, auto为int&;
auto&& x = 27;    //x为int&&, auto为int&&;

//same as  array,func

2. auto类型推导与模板类型推导的不同点

使用括号表达式来赋值的时候,auto推导与模板推导表现不同

  1. 赋值表达式的几种方式:
int x = 10;
int x(10);            //区分于函数声明,括号内为常量;
int x = {10};
int x{10};
  1. 不同点:
    使用括号赋值法(包含大括号和小括号)表现行为不同:模板类型参数无法识别括号赋值法;auto会识别类型为std::initializer_list<int>
    auto能识别的要求也是括号内的变量类型是一致的。(毕竟std::initializer_list是一个模板类型)

  2. C++14的不同点
    C++14引用了auto可以作为普通函数的返回值,也可以作为lamdba表达式的函数形参,此时的auto类型推导是和模板类型推导完全一致的:无法识别括号表达式初始化

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容