值 (计算机科学)

✍ dations ◷ 2025-07-20 22:14: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是一样的。字符串的字节序在不同处理器之间可能不同,取决于汇编器和计算机体系结构。

相关

  • 炭疽病炭疽病(英语:anthrax)是由炭疽杆菌感染造成的疾病,感染途径包括皮肤接触、呼吸道、消化道以及注射等四种,通常在感染一天至两个月后开始出现症状,经由皮肤接触的感染起初会出现小
  • 专性厌氧微生物专性厌氧菌(obligate anaerobes)是一类仅能进行无氧呼吸,且无法在正常大气(氧含量21%)等富氧环境下存活的微生物。这类生物对氧气的耐受力不同,部分专性厌氧菌可以在氧含量达8%的
  • 肼酞嗪肼屈嗪(Hydralazine),又名肼苯哒嗪,是一种治疗高血压和心脏衰竭的药物。适应症包含妊娠高血压以及高血压急症(英语:hypertensive emergency)。目前已知黑人若并用硝酸异山梨酯治疗
  • 王粲王粲(177年-217年2月17日),字仲宣,山阳郡高平县(今山东省济宁市微山县)人。擅长辞赋,建安七子之一,被誉为“七子之冠冕”。汉献帝西迁的时候,王粲来到长安,去拜访名士蔡邕。当时蔡邕家
  • 级联反应串联反应又称为级联反应,通常是一系列连续的分子内有机反应,有机反应是借由高活性的中间体进行的。它使单一无环的前驱体进行有机合成为一多核分子的复合体。定义为从前提分子
  • 二巯丙醇二巯基丙醇(INN:Dimercaprol)也称二巯丙醇、抗路易士药剂、BAL、双硫代甘油,是一种解毒药。最早是由第二次世界大战期间英国牛津大学的生化学家们研制出,当时是作为生化武器路易
  • 尿黑酸尿黑酸(2,5-二羟基苯乙酸)是一种酚酸,发现于野草莓树蜜中。它也存在于细菌性植物病原体野油菜黄单胞菌(Xanthomonas campestris pv. phaseoli)中,在解脂耶罗维亚酵母(Yarrowia lipo
  • 地质学时间表地质年代是用来描述地球历史事件的时间单位,通常在地质学和考古学中使用。地质年代共分为六个时间单位,从大到小依次是是宙/元(eon)、代(era)、纪(period)、世(epoch)、期(age)、时 (chron
  • 2001火星奥德赛号2001火星奥德赛号(英语:2001 Mars Odyssey)是美国国家航空航天局的火星探测卫星,由洛克希德·马丁制造卫星,花费约2.97亿美金。主要任务是寻找水与火山活动的迹象,同时也是火星探
  • 工程伦理工程伦理(Engineering ethics)是应用于工程技艺的道德原则系统,是一种应用伦理。:3工程伦理审查与设定工程师对于专业、同事、雇主、客户、社会、政府、环境所应负担的责任。工