C++值的分类 —— 摘自维基百科

来源:互联网 发布:淘宝如何抢秒杀商品 编辑:程序博客网 时间:2024/06/05 09:33
在C++11,对于值的分类,要考虑标识(identity)与可移动性(movability),二者的组合产生了五种分类:
  • 基础值类型
    • 左值lvalue:可以用取地址运算符&获取地址的表达式。也可定义为非临时对象或非成员函数。具有标识,但不可移动。这也是C++03的经典左值。可用于初始化左值引用。可以有不完备类型(incomplete type)。包括:
      • 作用域中的变量名与函数名,不论其类型。因此,具名的右值引用,即具有右值引用类型的变量,也是左值表达式,这符合一般规律,不是特例。
      • 函数调用表达式或重载运算符表达式,如果其返回类型为左值引用。
      • 内建的先增(前缀++)、先减(前缀--)、解引用(dereference)、赋值、复合赋值、下标(除了数组临终值)、成员访问(除了临终值的非静态非引用成员、成员枚举值、非静态成员函数),通过数据成员指针的访问且左端操作数为左值、逗号运算符且右端的操作数为左值、三元条件运算符(ternary conditional)且第二与第三操作数为左值。
      • 到左值引用类型的类型转换表达式。
      • 字符串字面量(string literal)
      • 函数调用表达式如果函数返回类型为到函数类型的右值引用
      • 类型转换表达式,转换为到函数的右值引用
    • 临终值xvalue(expiring value):具有标识,并且可以移动。对应的对象接近生存期结束,但其内容尚未被移走。可以多态;非类对象可以cv限定。包括:
      • 函数调用或重载的运算符表达式,如果返回类型是右值引用。
      • 类型转换表达式,转换为右值引用,如static_cast<T&&>(val)或(T&&)val
      • 访问xvalue的非静态类成员。
      • 指向数据成员的指针表达式,第一操作数是xvalue
    • 纯右值prvalue:不具有标识,但可以移动。对应临时对象或不对应任何对象的值。纯右值不能是多态的;临时对象的动态类型是表达式类型;非类且非数组的纯右值不能是const限定的;不能有不完备类型(除了void)。包括:
      • 字面量(除了字符串字面量)。
      • 函数调用或重载的运算符表达式,如果返回类型不是引用。
      • 内建后增、后减、算术与逻辑运算符、比较运算符、取地址运算符、访问成员枚举值、访问非静态成员函数、访问右值的非静态非引用数据成员、访问右值的数据成员指针或非静态函数成员指针、逗号运算符且右端操作数为右值、三元条件运算符且第二或第三操作数不是左值。
      • 类型转换表达式,转换为非引用类型。
      • Lambda表达式
  • 广义左值glvalue:具有标识。包括左值与临终值。可以多态、动态类型。
  • 右值rvalue:可以移动。包括濒死值与纯右值。不能通过&运算符取地址。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机qq密码忘了怎么办 腾讯安全中心冻结解冻进不去怎么办 qq钱包充值限额怎么办 qq没绑卡支付密码忘了怎么办 手机qq停止运行该怎么办 手机不支持qq软件运行怎么办 王者传奇冲元宝不到账怎么办 支付宝充值地下城点卷冲错了怎么办 dnf点券冲错了怎么办 百家号改了手机绑定找不到了怎么办 银行卡换了网银怎么办 qq没有银行卡转不出钱怎么办 qq钱包限制一万怎么办 qq余额超过20万怎么办 扣扣忘记了密码怎么办 qq钱包发不出来怎么办 qq支付密码忘了怎么办? 扣扣上转账错了怎么办 qq绑卡存在异常怎么办 微信没绑银行卡忘记支付密码怎么办 微信的自动扣费怎么办 不小心把钱充到微信财付通该怎么办 财付通用什么充值卡充值话费怎么办 苹果手机灯坏了怎么办 手机电灯不亮了怎么办? 苹果手机相机坏了怎么办 苹果5s手机背光灯不亮怎么办 苹果5s灯控坏了怎么办 微信q币冲错号码怎么办 支付宝转账到之前号码怎么办 qq红包收不了钱怎么办 qq抢红包要实名认证怎么办 支付宝被骗冲q币怎么办 qq发红包发错了怎么办 qq红包发不出来怎么办 qq红包发多了怎么办 qq发红包要短信验证怎么办 不是qq好友发了红包怎么办 苹果手机升级后支付宝打不开怎么办 qqq币充了没进帐怎么办 怎么办q币换成qq余额