从临时对象返回左值引用

bar*_*-md 6 c++ reference lifetime rvalue lvalue

是,返回左值引用*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();
}
Run Code Online (Sandbox Code Playgroud)

是否有任何情况下返回的值f()将在某个时刻成为悬空参考?

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

Ste*_*oft 9

*this永远不是右值,但在这种情况下,它是(参考)临时的.临时对象是直到它们被定义完成该语句有效对象,即,直到代码到达终止;,或直到该控制表达式的结尾for,if,while,do,和switch语句,例如if (A{}.f()) { something; },临时是有效的,直到最后一个)之前的身体的条件({ something; }).

  • @biowep是的,它将成为后续声明中的悬空参考 (3认同)