5. 优先使用auto而非显示类型声明

在C++之中,使用auto关键字声明类型可以将程序员从输入繁琐的类型中解放出来,编译器会自动推导出变量的实际类型。

template<typename It>
void dwim(It b, It e)
{
while(b != e){
typename std::iterator_traits<It>::value_type
currValue = *b;
...
}
}

使用auto关键字

template<typename It>
void dwim(It b, It e)
{
while(b != e){
auto currValue = *b;
...
}
}

在C++14中,lambda函数的参数都可以使用auto来定义。

auto derefLess =                            // C++14 comparison
[](const auto& p1, // function for
const auto& p2) // values pointed
{ return *p1 < *p2; };

使用auto生命类型还可以将我们从类型截断的问题中解放出来:

std::vector<int> arrs;
auto size = arrs.size();

在C++中,unordered_map的key的类型是const类型的,所以即便采取如下方式遍历unordered_map容器,仍然会产生临时对象:

std::unordered_map<std::string, int> m;
... for (const std::pair<std::string, int>& p : m)
{
... // do something with p
}

但是借助auto,我们不仅使声明更加简洁,还避开了此问题:

std::unordered_map<std::string, int> m;
... for (const auto& p : m)
{
... // do something with p
}

6. 当auto推导出非预期类型时应当使用显示的类型初始化

在C++中,因为标准不允许返回对bit的引用,所以对于vector<bool>标准库进行了特化处理,其[]运算符返回的是std::vector<bool>::reference类型的临时对象。对临时对象的修改会被其同步到vector中,因而这样使用auto关键字是不合规的。

Widget w;

auto highPriority = features(w)[5]; // w是不是个高优先级的?

processWidget(w, highPriority); // 配合优先级处理w

在这种情况下,我们只需显示指出highPriority的类型为bool即可规避此问题。

最新文章

  1. http、tcp、udp、OAUTH2.0网络协议区别
  2. 北京易信软科信息技术有限公司-仓库管理系统V1.0
  3. The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. 错误的原因及解决方案
  4. Java算法-选择排序
  5. kail2在虚拟机上的安装
  6. iOS 工厂方法模式
  7. C#&#39;~&#39;按位取反运算符的使用
  8. .net链接Oracle数据操作类库
  9. 使用 getopt() 进行命令行处理
  10. bzoj3527: [Zjoi2014]力 fft
  11. Go基础系列:defer、panic和recover
  12. 20165234 《Java程序设计》第三周学习总结
  13. python_05 可变类型与不可变类型、集合、字符串格式化
  14. 选择困难症的福音——团队Scrum冲刺阶段-Day 7
  15. centos7 下安装配置python3.6
  16. python中while循环运算符及格式化输出
  17. Generate Parentheses leetcode java
  18. 关于IIS下字体跨域问题
  19. 安卓程序代写 网上程序代写[原]C语言基础
  20. Selenium Web自动化 原理

热门文章

  1. Python--Windows下安装虚拟环境
  2. Mac 快速切换桌面快捷键
  3. stm32 中断号和中断处理函数建立关系
  4. Objective-C 类簇深入理解
  5. 在项目中,多个方法会调用相同的sql语句,怎么解决各个方法的不同sql查询,解决冲突。
  6. POJ3301 Texas Trip 计算几何、随机化贪心
  7. WPF中DataGrid中的DataGridCheckBoxColumn用法(全选,全否,反选)
  8. Scala学习(四)练习
  9. Flutter - BottomNavigationBar底部导航栏切换后,状态丢失
  10. slurmdbd.conf系统初始配置