左值

✍ dations ◷ 2025-10-21 04:27:08 #左值
在计算机科学中,值(英语:Value)是一无法进一步求值的表达式。例如,表达式“1 + 2”不是一个值,因为它可以被化简为表达式“3”。表达式“3”不能够继续化简,因此它是一个值。表达式既有类型(type)属性,又有值分类(value categories)属性。两种属性彼此独立。也就是说,对每一种类型的表达式,都有各种值分类。大多数编程语言支持几种常见的值。一些语言使用左值(l-value)和右值(r-value)的概念。左值具有确定的、可以被获得的内存地址。这意味着左值可以是变量,也可以是对指向特定内存地址的指针解引用(dereference)的结果。例如C语言的表达式(4 + 9),在执行时,计算机生成一个整数值13,但因为程序没有明确指定这个13如何在计算机中存储,所以这个表达式产生一个右值。另一方面,如果一个C程序声明了一个变量x并将x赋值为13,那么表达式(x)的值是13,并且是一个左值。在C语言中,术语“左值”最初表示可以被赋值 (计算机科学)(即位于赋值运算符左侧)的对象,但由于“const”被加入到语言中,这类对象现在被称作“可更改的左值”。C++中,左值和右值是表达式的分类,一个表达式必然是左值或右值之一。C++11把上述左值性(lvalueness)扩充为更复杂的值类别(value category),包含左值(lvalue),纯右值(prvalue)和临终值(xvalue)三个基本分类(fundamental classification),一个表达式必然是三者之一。左值和右值的概念最早由CPL程序语言的一篇论文引入。 这时定义的左值是可以放在赋值号左侧赋予新值的对象;右值是可以放在赋值号右侧读出其值的对象。在B语言中,左值和右值作为文法的元素被明确。在C语言中,文法不再出现左值和右值的区别,左值的概念被保留在语义规则中,而“右值”在ISO C中被视为“值”的同义词。C++语言引入了const限定的对象。const对象可以取地址,但是不能被赋值;而一些右值对象也可以出现在赋值号的左边被赋值。因此,截至C++03标准,把具有标识(identity)的表达式规定为左值,不具有标识的表达式规定为右值。因而,名字、指针、引用等是左值,是命名对象,具有确定的内存地址;字面量、临时对象等为右值,右值仅在创建它的表达式中可以被访问。函数名字是左值(在C语言中规定它既不是左值也不是右值),数组名是常量左值,但是在大多数表达式中函数名字与数组名字自动隐式转换为右值。右值的生存期短暂,所以需要用左值去捕捉右值。把右值复制(copy)到左值上是常见操作。C++11标准引入了右值引用数据类型与移动语义,因而左值与右值的定义发生了很大变化。右值引用变量绑定到右值上,延长了右值对应的临时对象的生存期。移动语义把临时对象的内容移动(move)到左值对象上。因而在C++11,对于值的分类,要考虑标识(identity)与可移动性(movability),二者的组合产生了五种分类:C++的非静态成员函数调用表达式(obj.func与ptr->func),非静态成员函数指针调用表达式(obj.*mfp与ptr->*mfp)被当作纯右值,但是不能用于初始化引用,不能做函数实参,仅仅能用作函数调用表达式左边的操作数,如(pobj->*ptr)(args)。返回void的函数调用表达式、到void的类型转换表达式、throw表达式被当作纯右值。但是不能用于初始化引用,不能做函数实参。可用于某些上下文环境中(如单独作为一行语句、逗号操作符的左端表达式等),或返回void的函数的return语句中。此外,throw表达式可用作三元条件操作符的第二或第三操作数。位域(bit field)表达式是左值,但不能用&运算符取地址,不能绑定到非常量左值引用。常量左值引用可以用位域左值初始化,但实际上是另行分配绑定了一个对象。值可以是一个给定的数据类型,例如一个字符串,一个数字,一个单一的字母等几乎任何类型的数据。有些处理器支持多种尺寸的立即数,例如8位或16位,每一种指令形式采用独特的操作码和助记符。如果一个程序员提供的数据值不适合,汇编器将会出现“超出范围”的错误消息。大多数汇编器允许一个立即数被表示为ASCII,十进制,十六进制,八进制或二进制数据。因此,ASCII字符'A'和65、0x41是一样的。字符串的字节序在不同处理器之间可能不同,取决于汇编器和计算机体系结构。

相关

  • 医事人员医事人员(Health professionals),为中华民国(台湾)《医疗法》、 《医事人员人事条例》、《医事人员执业登记及继续教育办法》中之医疗人员总称,包含医师、中医师、牙医师、药师、
  • 瓜氨酸血症瓜氨酸血症(Citrullinemia)是一种遗传的障碍,使得血液内积聚氨及其他有毒物质。瓜氨酸血症属于一类遗传病,称为尿素循环代谢障碍。尿素循环是一连串的在肝脏内的化学反应,包括处
  • 根管治疗术根管治疗术 (Root Canal Therapy),又称牙髓治疗 (Endodontic Therapy),一般较常听到的俗称为抽神经,粤语称杜牙根,是牙医学中治疗牙髓坏死和牙根感染的一种手术。对于未能以一般
  • 光波光通常指的是人类眼睛可以见的电磁波(可见光),视知觉就是对于可见光的知觉。可见光只是电磁波谱上的某一段频谱,一般是定义为波长介于400至700奈(纳)米(nm)之间的电磁波,也就是波长比
  • 凝溶胶蛋白结构 / ECOD1C0F, 1C0G, 1D4X, 1DEJ, 1EQY, 1ESV, 1H1V, 1KCQ, 1MDU, 1NLV, 1NM1, 1NMD, 1P8X, 1P8Z, 1SOL, 1T44, 1YAG, 1YVN, 2FF3, 2FF6, 2FH1, 2FH2, 2FH3, 2FH4, 3A5L,
  • 奥尔维耶托主教座堂奥尔维耶托主教座堂(Duomo di Orvieto)是位于意大利中部翁布里亚大区奥尔维耶托镇的一座罗马天主教主教座堂,规模庞大,14世纪乌尔班四世下令建造,以纪念博尔塞纳的圣体布的神迹,据
  • F-22猛禽战斗机F-22“猛禽”(英语:F-22 Raptor)是世界上第一种单座双引擎第五代隐形战斗机。主要任务是取得并确保战区的制空权,额外的任务包括对地攻击,电子战和信号情报。F-22于2005年进入美
  • 灭菌剂杀菌(Sterilization),又称作灭菌,与消毒(disinfection)近似,但更追求移除或消灭物体表面、液体、药物、培养介质上的任何形式微生物及传播性病原体(如真菌、细菌、病毒、芽孢等)。适
  • 过冷过冷(Supercooling,又译超冷冻)是一种物理现象,透过降低液体或气体的温度,但不使其凝固的过程,能做到让水瞬间凝冰的效果。冰的形成其实是一个结晶的过程,如果原本水中已存在结晶核
  • 沃尔特·雅各布·格林沃尔特·雅各布·格林(德语:Walter Jakob Gehring,1939年3月20日-2014年5月29日),瑞士发育生物学教授,他曾经在巴塞尔大学担任教授。1965年,在苏黎世大学获得博士学位。2年后在耶鲁