参考" rvalue"在C11标准中仅限于以下脚注。
"有时被称为''rvalue'的是本国际标准 被描述为''表达的价值''"
ken Thompson的B manual使用术语lvalue&价值很高。请注意下面的&,++运算符(摘自B手册)
rvalue ::=
( rvalue )
lvalue
constant
lvalue assign rvalue
inc-dec lvalue
lvalue inc-dec
unary rvalue
& lvalue
rvalue binary rvalue
rvalue ? rvalue : rvalue
rvalue ( {rvalue {, rvalue}0 }01 )
lvalue ::=
name
* rvalue
rvalue [ rvalue ]
类似地,C ++似乎有左值转换的左值(lvalue_to_rvalue1)和lvalue_to_rvalue2
的描述关于上述陈述我几乎没有问题。
C&#34中的运营商是否存在这样的"参考"(链接等);类似"对于左值和右值的操作员的手动要求右值条款? (请注意我熟悉某些C运营商的左值要求)
术语" rvalue"广泛用于B并在C ++中使用,为什么C中缺少这个?
左值转换是左右转换是特定于C ++而不是C(由标准间接涵盖),如果涵盖,请引用标准中的相关部分吗?
答案 0 :(得分:2)
关于rvalues的C和C ++之间的区别可能是函数重载和引用。
但是,在C中,规则非常简单:左操作数的几个运算符必须是左值。任何其他其他操作数可以是l值或rvalue。通过C99标准的快速搜索给出了左值的要求:
&
运营商因此没有必要为表达式的值(rvalue)添加名称。它们只是表达式,使用它们的值。
关于何时产生左值:
.
运算符的结果,如果左操作数是左值->
运算符的结果(int[]{1,2}
)*
运算符的结果[]
值得注意的是,这些不是左值(其中一些是/可能是C ++中的左值,留给读者练习):
?:
=
,
为什么在C引用中使用,即使C标准中没有?嗯,说 rvalue 比说表达式的值要容易得多。这个词很熟悉,不会产生任何混淆。
答案 1 :(得分:0)
我正在发布一个答案,希望它可以帮助那些正在寻找同样事情的人。 我在Kenneth A.Reek的书"指针C"中找到了基于左值/右值的运算符分类表。本书第5.4.3节有一个运算符优先级表,其中包含每个运算符的lexp / rexp要求(运算符的操作数是否为lexp / rexp以及结果是否为lexp / rexp)。请注意,这是基于C89。