[英]Pointer to rvalue object member variable
這是一個非常快速的問題。 我有以下代碼:
struct integer {
int x;
int& ref() {
return x;
}
};
//main...
int* l = &integer{4}.ref();
std::cout << *l;
我的問題是: &integer{4}.ref()
不是一個右值,因為它是一個臨時對象嗎? 我怎么能有一個指向它的指針? 這是未定義的行為嗎?
雖然integer{4}
是一個右值,但您調用ref()
會返回一個int&
,它始終是一個左值。 這允許代碼編譯,但由於您取消引用指向不再存在的對象的指針,因此您具有未定義的行為。
為了解決這個問題,你可以提供一個參考,對於限定符ref
只允許它在左值調用。 那看起來像
struct integer {
int x;
int& ref() & {
return x;
}
};
如果您嘗試使用,將導致編譯器錯誤
integer{4}.ref()
因為integer{4}
不是ref
現在需要的左值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.