C++ 值类别

示例地址:值类别示例

1概述

每一个表达式都由类型和值类别来辨别,每个表达式都有一个非引用的类型,和一个值类别

值类别从C++11出现右值引用以后发生了翻天覆地的变化,C++98是继承C的分类法,即左值,右值

C++11之后则细分为,左值,纯右值,亡值三个细类,其中引申出的泛左值包含了左值和亡值,右值则是包含了纯右值和亡值



对这三个引申值类别的概述是:

泛左值:

    表明,该表达式的值确定一个对象,位域,或函数

右值:

    计算某个运算符的操作数的值,只需要一个操作数值即可,此时不存在结果对象

    初始化对象,或位域,此时存在一个用于初始化的结果对象,所有类和数组的纯右值都有结果对象,在某些语境下则会出现临时实质化,创建一个用于计算结果的对象(结果对象)

亡值:

    表示资源能够被重新使用的对象或位域的泛左值



2左值


左值可以是:

变量,函数,数据成员的名字(名字请见标识符段概述)即一个实体的名字,或是引用的名字(包含左值右值的)

返回左值引用的函数调用或重载运算符的表达式

所有赋值及其复合赋值运算符表达式

前置自增自减表达式

间接寻址表达式(内建的)

数组内建的下标访问表达式,除非数组是一个右值(特殊情况,通过数组类名直接用花括构建,此时数组即为一个结果对象)

当前对象为左值时,访问的对象不为非静成员函数或枚举项,当对象为右值时访问的对象是非引用的非静态数据成员时,内建的对象成员表达式(.)

当访问的对象不为非静态成员函数或枚举项时,对象指针通过内建的指针成员表达式

当对象为左值切指针指向成员是数据成员时的对象成员指针表达式

当对象指针的类指针指向的成员是数据成员时的指针成员指针表达式

字符串字面量

转换为左值引用的类型转换表达式

返回函数右值引用的函数调用或重载运算符表达式

转换为函数右值引用的类型转换表达式



3纯右值:

除了字符串字面量的字面量

返回非引用的函数调用或重载运算符表达式

后置自增表达式

除了赋值及其复合赋值之外的算术表达式

内建的逻辑和比较表达式

内建的取址表达式

内建的对象成员为非静态函数或枚举项的对象成员表达式

内建的对象成员位非静态函数或枚举项的指针成员表达式

当对象指向成员是函数成员时的对象成员指针表达式

当对象指针的类指针指向的成员是函数成员时的指针成员指针表达式

转换为非引用类型的类型转换表达式

this

枚举项

lambda表达式



4亡值

返回右值引用的函数调用或重载运算符表达式

右值数组的下标访问

对象成员表达式,其中对象是右值并且成员是非引用类型的非静态数据成员

对象的成员指针表达式,其中对象是右值并且成员指针指向数据成员

转换为右值引用的类型转换表达式



5性质

泛左值:

左值

左值可以被取地质,可修改的左值可以使用内建的赋值和内建复和赋值运算数的左操作数,可以用作初始化左值引用

泛左值可以通过左值到右值,数组到指针,或函数到指针形成纯右值,可以是多态的,可以是不完整类型,只要表达式允许

亡值

亡值可以绑定到右值引用,并且可以是多态的,非类型的亡值可以有cv限定

右值:

纯右值:

纯右值不能多态,非类非数组纯的右值不能有cv限定,函数调用,类型转换表达式,可能会生成cv限定的纯右值,但是会被立刻剥离,纯右值不能不具有完整类型

右值不能被取址,不能左为内建的赋值,复合赋值表达式的左运算数,可以初始化const的左值引用或右值引用,此时右值的生存周期将被延长到引用的声明周期结束,存在参数为const的左值引用和右值引用的重载函数时,右值首先绑定右值引用,因为更加特化。



6其他特殊类别

对于非静态成员函数而言,所有绑定准确对象后进行访问的行为的表达式都是纯右值,即obj.func,或obj.*pfunc此时这个表达式智能作为函数调用运算符的左操作数


返回void,转换为void类型,throw表达式都是纯右值表达式,只可以出现在弃值语境内(参考表达式节)


代表某个位域的表达式时左值表达式,它可以作为赋值系列表达式的左值,但是不能被取址,但是不能绑定非const的左值引用,const的左值引用可以被位域初始化,但是无法实质绑定到相关位域上,只能是被绑定到了一个相关位域的临时副本上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,364评论 0 5
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,504评论 1 51
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,731评论 2 9
  • 我的春天和大地的不一样 无关节气和盛大的开幕 你笔下开篇的故事何时结尾 他便被囚禁到尘世的荒原不再苏醒 你的双眼荡...
    野马王阅读 213评论 2 5
  • 雷电使我从睡梦中惊醒 从云层直劈而下,风声鹤唳 盖过了列车的鸣笛 重重撞击我久闭的眼瞳 神形坐定,刹想起 时间如此...
    長安之上阅读 159评论 0 1