指向右值对象成员变量的指针

问题描述 投票:3回答:1

这是一个非常快速的问题。我有以下代码:

struct integer {
    int x;
    int& ref() {
        return x;
    }
};

//main...
int* l = &integer{4}.ref();
std::cout << *l;

我的问题是:&integer{4}.ref()不是右值,因为它是一个临时对象?我怎么有指向它的指针?这是未定义的行为吗?

c++ pointers rvalue
1个回答
2
投票

integer{4}是一个右值时,您调用ref()会返回一个始终为左值的int&。这允许代码进行编译,但是由于您拥有一个指向不再存在的对象的指针,因此您具有未定义的行为。

要解决此问题,您可以为ref提供ref-qualifer,仅允许在类似[]的左值上调用它>]

struct integer {
    int x;
    int& ref() & {
        return x;
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.