【发布时间】:2012-06-19 16:27:24
【问题描述】:
在 C 中,有没有办法识别右值和左值?
其中一些很容易识别,比如在赋值中,左边的值是左值,右边的值是右值。
但在其他场景下,很难识别这样的规则。
例如:*p++ 和i++(其中 p 是指向整数的指针,i 是整数) - 如何识别它是右值还是左值?
上下文是 ++*p++ 有效,而 ++i++ 无效,因为 i++ 是右值(正如严肃的人所说)。
如何识别表达式中的右值和左值?
【问题讨论】:
-
我认为这是一个很好的问题,但您所说的“识别”是什么意思?您是否想要一个完整的操作列表以及它们是否返回 l 或 r 值?一种从函数信号中分辨的方法?一种查看每行包含左值或右值的代码的方法?
-
@djechlin,“识别”我的意思是,我是否可以通过查看源代码来确定代码片段是否有效(无需编译)。如果没有完整的列表,是否有可以用来识别 rvalue 和 lvalue 的方法?但是,如果存在一个完整的列表,那对我有用。
-
我认为你应该从忘记“rvalue = value on the right”开始,这是完全错误的。
-
@qdii,我同意。但是如何辨别什么是对的呢?
-
lvalue and rvalue 的可能重复项