Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

C++-11-改进程序性能

概述

c++11 引入了新特性,提高了性能。

右值引用
转移语义
完美转发
更加高效容器

右值引用

右值引用优化性能,避免深拷贝

有时候会有类分配了大量堆内存,而且我们需要继续用下去,为了避免在拷贝这个对象时重新分配,可以使用右值引用。重载掉两个函数:右值构造函数、右值赋值操作函数。

在使用这个特性的时候,将会配合使用转移语义,将一个左值转换成右值,用于交接使用权。

移动语意

1
2
3
4
5
int a = 1; // 左值
int &b = a; // 左值引用

// 移动语意: 转换左值为右值引用
int &&c = std::move(a);

完美转发

只有在需要的时候,才调用复制构造函数
左值被转发为左值,右值被转发为右值

要解释完美转发的原理,首先引入 C++11 的引用折叠原则

左值-左值 T& & ——》左值
左值-右值 T& && ——》左值
右值-左值 T&& & ——》左值
右值-右值 T&& && ——》右值

参考