C++11新特性使用总结

作者简介: 肖攀, 腾讯高级工程师。

最近开始使用C++11编码,编码效率和代码质量提升不少,把目前我遇到的提升效率和代码质量的新特性都总结一下。(备注:这里不会列出所有的C++11新特性,只会列出我编码过程中实际用到的新特性)

一、auto关键字,这个关键字作用类似js里的var,可以自动判断变量类型。在实际编码中,这个变量真的可以省很多代码,比如:

std::map<std::string, std::set<std::string>> x = return_x();//return_x是一个返回std::map<std::string, std::set<std::string>>变量的函数。

特别的,当for循环std::map<std::string, std::set<std::string>>这个变量的时候,要写一个迭代器,但是定义std::map<std::string, std::set<std::string>>::iterator it,一行代码就被占了一半了,吐血。换成auto,代码就少多了。

二、for循环,支持for(x: xxx)这种模式了,其中xxx是一个支持迭代器的集合,x是xxx中的一个元素,配合auto关键字,for循环的代码就清爽多了:

之前:

    for (std::map<std::string, std::set<std::string>>::iterator it = xxx.begin(); it != xxx.end(); it++) {}

现在:

    for (auto x : xxx) {}

三、在定义类成员变量的时候初始化。比如:

    class X

    {

         int x = 0;

    }

这个特性看起来貌似没啥用,但是实际用起来才发现可以少写很多代码,想想每增加一个成员变量,都要去构造函数初始化列表里添一点东西就烦。

四、thread库,之前stl没有提供标准的线程库,要么裸用系统提供的,要么自己封装一下。现在stl提供了,而且非常简洁,如下:

    (这里借用一下lamda函数)

    std::thread t([](){ std::cout << "hello world!" << std::endl;})

一个用子线程t运行打印hello world!的功能就完成了。

五、lambda函数,就是匿名函数,看各种介绍说很牛B的样子,不过目前我用的很少,应该是在foreach这类函数里用比较好。或者可以用来实现boost里scope_exit的特性。

六、chrono,stl里新提供了chrono类,这个类主要提供两个功能,时间点(timepoint)和时间段(duration)功能,由duration衍生出nanoseconds,microseconds,milliseconds等时间单位,并且提供他们的加减和换算功能。把我们在看代码时,从一个整型到底是一个时间点还是一个时间段的纠结里解放出来。另外,chrono提供了steady_colock和system_clock两个时钟,一个用来单调递增,一个用来表示系统时间,也方便了不少。

目前用到的主要就这六个地方,后续有觉得新的好特性再继续总结。(PS:tlinux2.0上4.8的gcc编译器,在chrono的实现里有一个bug,std::chrono::duration::max本意是系统能提供的最长时间段,但是在gcc的实现里,这里溢出了,变成了负数,所以意思就变成类似std::chrono::duration::min的作用,用的时候需要注意下绕过这个坑)

原文链接:

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

java反射的二三事

一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息,诸...

35311
来自专栏技术博文

php设计模式

什么是设计模式 设计模式,是一种解决问题的思维,而并非某种特定的方法。是前人给我们总结的宝贵经验。学习设计模式是为了编写可复用、可拓展、高性能软件。学习设计模式...

2679
来自专栏程序员宝库

这些 Java 面试题必须会---鲁迅

写在前面 春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对...

27910
来自专栏Java学习网

Java 实现线程死锁

Java 实现线程死锁 概述 春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Synchronized关...

2256
来自专栏不会写文章的程序员不是好厨师

[翻译]Java 6,7,8中的String.intern

最近一直在关注“故障排查”的相关知识,首先着手的是OOM的异常。OOM异常通常会有Perm区的OOM(java7及以前)和HeapSpace的OOM,这两种各有...

702
来自专栏Java技术

关于Java代码优化的N条建议!

本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,作者的说法是这样的:

742
来自专栏阿杜的世界

Java Web技术经验总结(十五)

622
来自专栏贾老师の博客

C/C++ 中的异常处理

1012
来自专栏進无尽的文章

设计模式| 行为型模式 (下)

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、解释器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式。分两篇文章...

742
来自专栏pydata

J2EE复习

JVM的两个内存:      运行时数据区 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区...

482

扫码关注云+社区