c++ -- value category

本文详细介绍了C++中的值类别,包括左值、右值、xvalue和prvalue的概念,并探讨了它们在表达式中的应用,如函数调用、类成员访问、引用绑定等,帮助理解C++中表达式结果的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++ – value category

说到 value category ,可能大家都不知道是啥。但是说到左值,右值,可能很多人就听说了。C++将一个值作为左值、右值的分类称作 value category。

说到 value category ,首先要强调一点,就是 value category 是值的属性,不是变量的属性。所谓值,就是表达式的结果,也就是说着也是表达式结果的一个属性。同时,表达式对其子表达式的结果的 value category 可能会有一定要求。因而说到左值右值,必须明确得到这个值的表达式,或者使用这个值的表达式,否则没有意义。

另外,这里所说的值可以是一个函数(函数本身,不是函数指针)。

value category

C++11 的 value category 其实并不只有左值、右值。C++11 的每一个值可以分为三类:lvalue, xvalue(eXpiring value), prvalue(pure rvalue)。然后,lvalue 与 xvalue 合称 glvalue (general lvalue);xvalue 与 prvalue 合称 rvalue。

对各类的简要说明如下:

  • lvalue: 一个对象
  • xvalue: 也是一个对象,通常已经接近生存期的终点
  • glvalue: lvalue 与 xvalue
  • rvalue: xvalue, 临时对象,或前面两者的子对象,或没有对象的值
  • prvalue: 不是 xvalue 的 rvalue 。

仅依靠上面的说明来区分 value category 似乎有些困难,不过标准也没有期望能通过以上的说明区分不同 value category。标准采用的另一种方式定义 value category ,及明确的规定了每一种表达式的结果的 value category 。同时说明的每一种表达式所期望的操作数的 value category (对于操作数,没有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值