指向右值对象成员变量的指针
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()
为 returns 一个始终为左值的 int&
。这允许代码编译,但是你有未定义的行为,因为你取消引用指向不再存在的对象的指针。
要解决此问题,您可以为 ref
提供 ref-qualifer,它只允许在左值上调用它。那看起来像
struct integer {
int x;
int& ref() & {
return x;
}
};
并且如果您尝试使用
将导致编译器错误
integer{4}.ref()
因为 integer{4}
不是 ref
现在需要的左值。
这是一个非常快速的问题。我有以下代码:
struct integer {
int x;
int& ref() {
return x;
}
};
//main...
int* l = &integer{4}.ref();
std::cout << *l;
我的问题是:&integer{4}.ref()
不是右值,因为它是一个临时对象吗?我怎样才能有指向它的指针?这是未定义的行为吗?
虽然 integer{4}
是一个右值,但您称 ref()
为 returns 一个始终为左值的 int&
。这允许代码编译,但是你有未定义的行为,因为你取消引用指向不再存在的对象的指针。
要解决此问题,您可以为 ref
提供 ref-qualifer,它只允许在左值上调用它。那看起来像
struct integer {
int x;
int& ref() & {
return x;
}
};
并且如果您尝试使用
将导致编译器错误integer{4}.ref()
因为 integer{4}
不是 ref
现在需要的左值。