谈谈C++11左值和右值的区别

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值