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 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【Python 第26课】 操作list

上周给list开了个头,知道了什么是list。假设我们现在有一个list: l = [365, 'everyday', 0.618, True] 除了用for...

36811
来自专栏算法channel

其他|c++几个容易混淆的点

希望时间的流逝不仅仅丰富我们的阅历,更重要的是通过提炼让我们得以升华,走向卓越。 1编译出错 一段时间没写c/c++的程序了,最近公司一个项目底层的核心算法是...

3415
来自专栏鸿的学习笔记

合理选择数据结构

写程序很重要的一点是选择合理的数据结构,不合适的数据结构在如今高性能计算机盛行的情况下,小数据量体现不出什么来,但是在超大数据的时候, 你所面临的困境将会无穷的...

792
来自专栏鸿的学习笔记

python新手应注意的一些小问题

最重要的是看你公司喜欢哪个版本的python。。。。对于你个人而言,python2与python3的差别你可以忽略。。。。 一.注意pep8的编程风格,请记住...

5422
来自专栏老马说编程

计算机程序的思维逻辑 (1)

程序大概是怎么回事 计算机就是个机器,这个机器主要由CPU、内存、硬盘和输入输出设备组成。计算机上跑着操作系统,如Windows或Linux,操作系统上运行着各...

21010
来自专栏灯塔大数据

技术 | Python从零开始系列连载(二十七)

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

1183
来自专栏用户2442861的专栏

近一个月的面试总结 分类:JAVA

本文转载自:http://blog.csdn.net/pistolove/article/details/46753275

1272
来自专栏磐创AI技术团队的专栏

干货 | 如何写一个更好的Python函数?

《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。

801
来自专栏量子位

干货 | 如何写一个更好的Python函数?

《Writing Idiomatic Python》一书的作者在Medium上发表了一篇文章,给出了6个建议。

982
来自专栏精讲JAVA

Gof设计模式之工厂模式(四)

定义 工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式...

1988

扫码关注云+社区

领取腾讯云代金券