上网查了一下发现文章之间有不少冲突的,所以自己记一下以后看自己的。

WARNING

当然先叠甲,这篇文章的内容并没有实验过。如果发现文章写的和实际不一样也是正常现象。欢迎 issue。

首先需要了解得是,拷贝省略是一种编译时技术。概念是「在特定情况下消除对象创建时的不必要拷贝(或移动)构造函数的调用」。

主要包含的情况大概有几种。

需要注意的是,在 C++17 后,某些特定情况下的复制省略(RVO/NRVO 等)是强制要求的,即便其拷贝或者转移函数有副作用

返回值优化 Return Value Optimization

函数返回临时对象的时候,对象直接被构造在调用者的目标位置上。

具名返回值优化 Named Return Value Optimization

当用一个临时对象来初始化另一个同类型的对象时,可以省略/移动构造函数。

同类型赋值初始化

todo