Den*_*cor 4 c++ pointers rvalue
这是一个非常快速的问题。我有以下代码:
struct integer {
int x;
int& ref() {
return x;
}
};
//main...
int* l = &integer{4}.ref();
std::cout << *l;
Run Code Online (Sandbox Code Playgroud)
我的问题是:&integer{4}.ref()因为它是一个临时对象,所以它不是一个右值吗?我怎么能有一个指向它的指针?这是未定义的行为吗?
Whileinteger{4}是一个右值,你调用ref()它返回一个int&始终是一个左值的。这允许代码编译,但由于您取消引用指向不再存在的对象的指针,因此您具有未定义的行为。
为了解决这个问题,你可以提供一个参考,限定符为ref只允许它在左值调用。那看起来像
struct integer {
int x;
int& ref() & {
return x;
}
};
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用,将导致编译器错误
integer{4}.ref()
Run Code Online (Sandbox Code Playgroud)
因为integer{4}不是ref现在需要的左值。