calm27 Asked:2020-08-02 18:03:11 +0000 UTC2020-08-02 18:03:11 +0000 UTC 2020-08-02 18:03:11 +0000 UTC 什么是右值和左值? 772 rvalue我在不同的资源上发现了不同的定义lvalue,。怎么样? right value还是read value? left value还是locator value? c++ 2 个回答 Voted Best Answer αλεχολυτ 2020-08-02T18:27:53Z2020-08-02T18:27:53Z 最初,它是关于赋值运算符的左右部分。但是这种简单的解密没有正确的版本,也不可能。条款将保持rvalue不变lvalue。但其中蕴含的意义,在标准中已经清楚地说明了。所有这些构成了表达式的类别。 左值(“广义”左值) 其求值定义对象、位域或函数的实体的表达式。 prvalue(“纯”右值) 一个表达式,其评估初始化对象、位域或评估运算符操作数的值,视使用上下文而定。例如,文字42, true,nullptr字符串文字除外,它们是左值表达式。 xvalue(“eXpiring”左值) 这是一个glvalue,表示其资源可以重用的对象或位域(通常是因为它们接近其生命周期的终点)。例如,调用的结果是一个xvaluestd::move表达式。 左值 它是一个glvalue,它不是一个xvalue。例如,变量、函数或数据成员的名称,无论其类型如何,甚至是右值引用类型的变量,都形成一个左值表达式。 右值 它是prvalue或xvalue。 因此,任何表达式主要是一个lvalue、xvalue或prvalue。右值已经是一个概括。 Croessmah stands with Russia 2020-08-02T18:24:11Z2020-08-02T18:24:11Z 我不知道你所说的“如何”是什么意思。rvalue 和 lvalue 是表达式的类别。这是标准中写的内容: — 泛左值是一个表达式,其评估确定对象、位域或函数的身份。 — prvalue 是一个表达式 >,它的求值初始化一个对象或一个位域,或者计算一个运算符的操作数的值,由它出现的上下文指定。 - 一个xvalue是一个glvalue,它表示一个对象或位域,其资源可以被重用(通常是因为它接近其生命周期的终点)。 — 左值是不是 xvalue 的左值。 — rvalue 是 prvalue 或 xvalue。 //... [注意:在历史上,左值和右值之所以被称为是因为它们可以出现在赋值的左侧和右侧(尽管这通常不再是正确的);glvalues是“广义”的左值,prvalues是“纯”的右值,xvalues是“eXpiring”的左值。尽管它们的名称,这些术语对表达式进行分类,而不是对值进行分类。——尾注]
最初,它是关于赋值运算符的左右部分。但是这种简单的解密没有正确的版本,也不可能。条款将保持
rvalue不变lvalue。但其中蕴含的意义,在标准中已经清楚地说明了。所有这些构成了表达式的类别。左值(“广义”左值)
其求值定义对象、位域或函数的实体的表达式。
prvalue(“纯”右值)
一个表达式,其评估初始化对象、位域或评估运算符操作数的值,视使用上下文而定。例如,文字
42,true,nullptr字符串文字除外,它们是左值表达式。xvalue(“eXpiring”左值)
这是一个glvalue,表示其资源可以重用的对象或位域(通常是因为它们接近其生命周期的终点)。例如,调用的结果是一个xvalue
std::move表达式。左值
它是一个glvalue,它不是一个xvalue。例如,变量、函数或数据成员的名称,无论其类型如何,甚至是右值引用类型的变量,都形成一个左值表达式。
右值
它是prvalue或xvalue。
因此,任何表达式主要是一个lvalue、xvalue或prvalue。右值已经是一个概括。
我不知道你所说的“如何”是什么意思。rvalue 和 lvalue 是表达式的类别。这是标准中写的内容: