question:
左值引用可以引用右值吗?
ask:
yes,const 的左值引用可以引用右值,condt int &a=10;
qustion:
右值引用可以引用左值吗?
ask:
右值引用可以通过std::move(v)指向左值
question:
声明出来的左值引用和右值引用是什么类型?
ask:
声明出来的左值引用和右值引用都是左值
int v = 10;
int &a = v;
int &&b = 10;
int &c = b;
右值引用实现移动语义和完美转发
实现移动语义:
对象赋值时,避免资源的重新分配
移动构造以及移动拷贝构造
stl应用
std::unique_ptr
实现完美转发:
函数模板可以将自己的参数完美地转发给内部调用的其他函数
完美是指不仅能准确地转发参数的值,还能保证转发的参数的作用值属性不变
万能引用
auto或者
template
void revoke(T &&t){
},
借用万能引用,通过引用的方式接收左右属性的值
引用折叠规则:(相当于解决了接收的问题)
参数为左值或者左值引用,T&&将转化为int&
参数为右值或者右值引用,T&&将转化为int &&
std::forward<T>(v)
若T为左值引用,v将转化为T类型的左值
若T为右值引用,v将转化为T类型的右值
相当于是解引用
int test(int &&t)
{
std::cout << "right" << std::endl;
return 0;
}
int main() {
int &&val = 10;
test(std::forward<int&&>(val));
getchar();
}
参考:
https://zhuanlan.zhihu.com/p/50816420