代码改变世界

C++11 特性

2019-12-02 14:44  陈心朔  阅读(411)  评论(0编辑  收藏  举报

之前工作中开发/维护的模块大多都是 "远古代码",只能编译 C++98,很多 C++11 的特性都忘得差不多了,再回顾一下


右值引用&转移语义
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率;
能够更简洁明确地定义泛型函数。
https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/

委托构造函数
在一个构造函数中调用另外一个构造函数,这就是委托的意味,不同的构造函数自己负责处理自己的不同情况,把最基本的构造工作委托给某个基础构造函数完成,实现分工协作。
http://blog.csdn.net/hyqsong/article/details/51542737

final
显式禁止类被继承

default
显式实现默认构造/析构函数

nullptr
强类型的空指针

auto
自动类型推导

constexpr
允许将变量声明为constexpr类型让编译器来验证变量的值是否是一个常量表达式。
声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化
http://blog.csdn.net/kturing/article/details/45286823

noexpect
声明函数不能抛出任何异常,若定义了noexpect的函数抛出异常,则程序终止
http://blog.csdn.net/zkreats/article/details/50550786

override
显式的在派生类中声明哪些虚函数需要重写,若未重写则编译器会报错
http://www.cnblogs.com/xinxue/p/5471708.html

lambda表达式
就地编写匿名函数(闭包)
https://www.zhihu.com/question/20125256

可变参数模板
可以在模板参数列表里书写任意数量类型名

模板别名
使用C++11的模板别名特性可以简化容器的类型声明
eg.

template<typename T>
using NgxStdVector = std::vector<T, NgxAlloctor<T>>; // 模板别名

NgxStdVector<char> v(pool);		// 使用模板别名创建容器

模板元编程
在编译期计算类型,根据模板参数推导返回值
http://ju.outofmemory.cn/entry/30164