C++17值类型 (Value Categories)

本文介绍了C++17中的值类型分类,包括lvalue、xvalue、glvalue、prvalue和rvalue。详细讨论了它们之间的转换,如glvalue如何转化为prvalue,以及在C++17中prvalue如何避免不必要的临时对象创建。还提到了值类型转换中的Temporary materialization现象及其触发条件。

什么是值类型

值类型是对c++表达式的分类 (不是对值的分类,和变量也没有关系)

值类型有哪些

lvalue:= 能取地址的表达式
  • 变量名,方法名,数组名、数组名[下标]
  • 函数返回的左值引用
  • *指针
  • 字符串常量
xvalue := 有地址但是不能取的表达式(生命周期马上要结束)
  • std::move返回的结果
glvalue:= lvalue + xvalue = 有地址的表达式 (不管能不能取)
prvalue:= 没有地址的表达式(用于初始化对象)
  • 常量(不包含字符串常量)
  • &lvalue
  • 计算操作符+ - * / %的结果
  • lambda表达式
rvalue:= xvalue + prvalue
  • c++17以前的旧概念,在c++17以后被弱化
    在这里插入图片描述

可以这么理解:c++11把表达式分为lvalue和rvalue(可以move),c++17开始表达式被划分成glvalue和prvalue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值