【C++11特性】右值、左值、右值引用、左值引用

缘起

C++是oop语言,所以以对象为组织架构,可能某些对象中并没有实现它的赋值语句,且它并不需要赋值,那么在函数中,需要将之作为入参,我们必须得到它的地址,也就是指针,但是指针操作有风险,那么我们可以使用右值引用。
换言之,我们将该变量直接送到调用函数中,不需要创建临时变量,这也将减少内存开销以及赋值所带来的时间开销

右值、左值

避免无谓的复制,提高了程序性能
避免深拷贝,优化性能
&& 可能是右值引用也可可能是左值引用
& 也可能是左值
左值,是能够被赋值的
右值,是临时的

左值引用,右值引用

  1. 左值引用是左值的别名
  2. 右值引用需要借用移动语义来使用右值

move

move的结果一定是右值

a = MyString("Hello"); // move
MyString b = a; // copy
MyString c = std::move(a); // move, 将左值转为右值

forward

向前引用 ,即当前作用域里面的初始状态作为,比如如下代码, 便是将t转为入参时候的类型。
注释1 调用第一个aaa
注释2 调用第二个aaa
第一个aaa中 T a实质是 c的左值
第二个aaa中 T a实质是 c的右值

template <class T>
void aaa(T & t)
{
	T a = std::forward(T);
}

void aaa(T && t)
{
	T a = std::forward(T);
}
int c = 3;
aaa(c);						//1
aaa(std::move(c));	//2

判定左值还是右值的方法

合理使用多态性进行左值右值的判定

template <class T>
bool is_rightValue(T& t)
{
	return false; //这是左值
}
template <class T>
bool is_rightValue(T&& t)
{
	return true; //这是右值
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值