跳转至

RVO (Return Value Optimization)

返回值优化,在部分情况下,会避免返回值进行复制构造

引用折叠

``` cpp

1
2
3
4
5
6
7
8
9
template<typename T>
void fun(T&& u);
using T = int &;
T& r1;  // int& & r1 -> int& r1
T&& r2; // int& && r2 -> int& r2

using U = int &&;
U& r3;  // int&& & r3 -> int& r3
U&& r4; // int&& && r4 -> int&& r4

```

有一个沾引用,就是左值引用,二者皆为右值引用才是右值引用

注意!

右值引用在函数传递过程中会变成左值,因为右值引用本身就是用一块特定内存存储左值。所以在传递中需要使用完美传递Forward进行参数保持.

1
2
3
void MakeData(Data&& data) {
    Data ret = Data(forward<Data &&>( data));
}