簡體   English   中英

指向右值對象成員變量的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM