通过左值引用修改右值的行为是什么?

What's the behavior of modifying rvalues through lvalue reference?

本文关键字:是什么 修改 引用      更新时间:2023-10-16

假设我有以下内容:

class foo
{
public:
    foo& Ref() { return *this; }
    int stuff;
};
void do_stuff(foo& f)
{
    f.stuff = 1;
}
int main()
{
    do_stuff(foo().Ref());
}

我正在通过左值引用修改右值。这合法吗?如果是或不是,有人能解释原因并在标准中提供相关章节吗?

我正在通过左值引用修改右值。

不,你不是。在do_stuff中,表达式f是一个左值,而不是右值值类别是关于表达式,而不是对象;对象具有类型

你正在修改一个临时的,但没关系。我不能引用任何一段简单的话来说明这一点;任何地方都不禁止修改碰巧是临时对象的对象。