《Modern Effective C++》学习笔记2 auto

条款五:优先选用auto,而非显式型别声明

auto的优点:

  1. 避免生成未初始化的变量;

  2. 省略冗长的变量类型的编写时间;

  3. 能够支持自动推导自己完全不知道类型的变量类型,例如lambda表达式;

  4. 方便进行代码平台切换,简化重构流程,自动转换类型;

  5. 避免由于类型不匹配导致兼容性和效率问题,例如隐式转换或者值拷贝操作产生的额外消耗;

auto的缺点:

  1. auto的推导类型并不总是尽如人意,总会有些特例,参见条款二和条款六;

 // 例外情况
 {11,112}            ->  std::initializer_list<int>
 std::vecotr<bool>[] ->   std::vector<bool>::reference // 返回代理型别而不是bool &

条款六:当auto推导的型别不符合要求时,使用带显示型别的初始化物习惯用法

C++中存在一种代理类,用于模拟或增广其他类,例如:

 std::vector<bool>::reference

这种代理类会导致auto推导出“错误”的型别,对于这种情况,需要使用带显式型别的初始化物习惯用法强制auto推导出你想要的型别,也可以用来降低变量的精度。

 std::vector<bool> features(4);
 // 带显式型别的初始化物习惯用法
 auto a = static_cast<bool>(feature[2]);
 ​
 double d = 1.2;
 // 降低变量的精度
 auto f = static_cast<float>(d);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值