繁体   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