Return 来自临时对象的左值引用

Return lvalue reference from temporary object

*this 是右值时,是否允许返回对 *this 的左值引用?

#include <iostream>
#include <string>
using namespace std;

class A {
public:
    A& f() {
        return *this;
    }
    string val() const {
        return "works";
    }
};

int main() {
    cout << A{}.f().val();
}

是否存在 f() 返回的值在某些时候会成为悬空引用的任何情况?

如果这是一个右值,那么调用 f() 是否会延长调用者的生命周期?

*this 从来都不是右值,但在这种情况下,它是(对)临时值的(引用)。临时对象在定义它们的语句完成之前是有效的对象,即直到代码到达终止 ;,或者直到 forif、[= 的控制表达式结束14=]、doswitch 语句,例如在 if (A{}.f()) { something; } 中,临时有效直到条件主体 ({ something; }) 之前的最后一个 )

*this 不是右值。它是一个左值。

所以,没问题。