C++中的指针、引用;左值、右值;左值引用、右值引用

一、指针、引用

引用指的是为已经创建的对象重新起一个名字。创建引用的时候,编译器只是将这个别名绑定到引用的对象上。

对象名提供了一种直接访问数据的方式,因为对象名本质上是数据所在的内存地址空间的一个地址映射。

引用提供了一种简介访问数据的方式,可以通过引用访问已经存在的对象的内容,在对数据的读写效果上,与使用原对象名对数据的读写效果是一样的。

指针则提供了另一种间接访问数据的方式:可以把数据的内存地址放到专门存放地址的对象里,然后通过这个对象对数据进行访问,这种专门用来存放地址的对象成为指针对象。

二、左值、右值

在C++中,左值(Lvalue)和右值(Rvalue)是两个重要的概念,用于描述表达式和值的特性。这些概念与C++中的赋值、传递参数、引用等操作密切相关。

左值(Lvalue):
左值是指可以出现在赋值操作的左边的表达式,即可以被赋值的表达式。通常来说,左值表示一个可标识的、有地址的内存位置,它可以被读取和写入。例如,变量、数组元素、结构体成员等都是左值,因为它们在内存中有位置,可以被赋值。

示例:

int x = 10; // 'x'是一个左值
int arr[5]; // 'arr'是一个左值,'arr[2]'也是一个左值

右值(Rvalue):
右值是指不能出现在赋值操作的左边的表达式,即不能被赋值的表达式。它们通常是临时的、不具有地址的值。右值可以用于初始化左值,但不能直接修改。

示例:

int y = 20; // '20'是一个右值,'y'是一个左值
int sum = x + y; // 'x + y'中的表达式是一个右值

三、左值引用、右值引用

左值引用就是对左值对象的基本引用,在C++11前,没有右值引用一说,因此我们常说的引用都是只左值引用。

在C++11以后的版本中,右值引用(Rvalue reference)的引入允许我们获取对右值的引用,这有助于实现高效的移动语义。

C++11引入了移动语义和右值引用,使得处理临时对象和资源管理变得更加高效。通过将右值引用绑定到右值,我们可以在转移资源所有权时避免不必要的数据拷贝。

示例:

std::string str1 = "Hello"; 
std::string str2 = std::move(str1); // 使用std::move将str1的资源所有权转移到str2

总之,左值和右值在C++中是用于描述表达式和值的重要概念,对于理解变量、赋值、引用和移动语义等方面非常关键。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherries Man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值