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
从来都不是右值,但在这种情况下,它是(对)临时值的(引用)。临时对象在定义它们的语句完成之前是有效的对象,即直到代码到达终止 ;
,或者直到 for
、if
、[= 的控制表达式结束14=]、do
和 switch
语句,例如在 if (A{}.f()) { something; }
中,临时有效直到条件主体 ({ something; }
) 之前的最后一个 )
。
*this
不是右值。它是一个左值。
所以,没问题。
当 *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
从来都不是右值,但在这种情况下,它是(对)临时值的(引用)。临时对象在定义它们的语句完成之前是有效的对象,即直到代码到达终止 ;
,或者直到 for
、if
、[= 的控制表达式结束14=]、do
和 switch
语句,例如在 if (A{}.f()) { something; }
中,临时有效直到条件主体 ({ something; }
) 之前的最后一个 )
。
*this
不是右值。它是一个左值。
所以,没问题。