左值与左值引用、右值与右值引用、移动构造函数。

1、什么是左值:可以被引用取地址的值。
在这里插入图片描述
在这里插入图片描述

const int a = 12; // a为左值
const int& pt = a; // pt为左值引用
double x1 = 1.2; // x1为左值
double& x2 = x1; // x2为左值引用

c风格字符串为左值。
详细介绍:C++ Primer Plus 8.2.3

2、什么是右值:可以出现在赋值表达式右边,但不能对其应用地址运算符的值。
在这里插入图片描述

int a = 10;
int b = 12;
int && x1 = 13; // 13为右值
int && x2 = a+b; //a+b为右值
double && x3 = std::sqrt(2.0) //std::sqrt(2.0)函数返回值为右值
double * ptr = &x1; // 通过右值引用获得13存储的地址

引入右值引用的目的之一:实现移动语义。
详细介绍:C++ Primer Plus 18.1.9

3、移动语义
不删除原对象,将其数据保留在原来位置,将现有对象与该位置关联。类似计算机中移动文件(只是移动了索引路径)。

在这里插入图片描述
4、移动构造函数与移动赋值运算符
例子:

//.h
Class Useless{
public:
	Useless(Useless&& f); // 移动构造函数,非const,参数为右值
	Useless& operator= (Useless&& f); // 移动赋值运算符
}

//.cpp
Useless four(one+two); // one+two为右值
Useless four=one+two; // one+two为右值

在这里插入图片描述
详细介绍:C++ Primer Plus 18.2.1

总结:

1、使用右值引用实现的移动语义有助于减少构造、析构临时返回对象造成的时间空间浪费
2、对大部分程序员,引入右值引用不是为了编写使用其的代码,而是调用使用其编写好的库代码
3、详细学习资料见C++ Primer Plus 18.2

参考资料:
1、左值、左值引用、右值、右值引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值