Open zixie1991 opened 7 years ago
在C语言中,左值是可以出现在=左边或右边的表达式,右值是只能出现在=右边的表达式
在C++中,左值是一个指向某内存空间的表达式,且可以通过&取得该内存空间的地址,右值是非左值的表达式(所有具名的变量或对象都是左值,而右值不具名)
在C++中,左值可被绑定到非const引用,左值或者右值则可被绑定到const引用
编译器会将已命名的右值引用视为左值,而将未命名的右值引用视为右值
引用折叠:引用的引用
std::move:将一个左值转换为右值
只有右值引用的右值引用会折叠成右值引用,其他的都会折叠成左值引用
将按照参数原来的类型转发到另一个函数
C++11右值引用
左值和右值
在C语言中,左值是可以出现在=左边或右边的表达式,右值是只能出现在=右边的表达式
在C++中,左值是一个指向某内存空间的表达式,且可以通过&取得该内存空间的地址,右值是非左值的表达式(所有具名的变量或对象都是左值,而右值不具名)
在C++中,左值可被绑定到非const引用,左值或者右值则可被绑定到const引用
右值引用
编译器会将已命名的右值引用视为左值,而将未命名的右值引用视为右值
引用折叠
引用折叠:引用的引用
移动语义 std::move
std::move:将一个左值转换为右值
只有右值引用的右值引用会折叠成右值引用,其他的都会折叠成左值引用
完美转发 std::forward
将按照参数原来的类型转发到另一个函数