C++ 来自临时对象的引用初始化';会员资料问题

C++ 来自临时对象的引用初始化';会员资料问题,c++,reference,C++,Reference,非常量引用只能绑定到左值,因此我尝试了以下方法: struct Foo { double value = 5.45; operator double&(){return value;} }; int main() { double& d = Foo{}; cout << d << endl; // seems ok 5.45 } structfoo { 双值=5.45; 运算符double&({返回值;} }; in

非常量引用只能绑定到左值,因此我尝试了以下方法:

struct Foo
{
    double value = 5.45;
    operator double&(){return value;}
};

int main()
{

    double& d = Foo{};
    cout << d << endl; // seems ok 5.45

}
structfoo
{
双值=5.45;
运算符double&({返回值;}
};
int main()
{
double&d=Foo{};
库特
那么为什么我得到了正确的值5.45

因为程序的行为是未定义的

我的代码是否生成UB

是的。您可以在对象的生存期之外访问该对象

d现在是一个悬而未决的引用吗

是的。正如您所说:临时对象及其成员已被销毁。所有以前对已销毁对象的有效引用都已无效,即挂起

这看起来似乎还可以,但实际上并不好

那么为什么我得到了正确的值5.45

因为程序的行为是未定义的

我的代码是否生成UB

是的。您可以在对象的生存期之外访问该对象

d现在是一个悬而未决的引用吗

是的。正如您所说:临时对象及其成员已被销毁。所有以前对已销毁对象的有效引用都已无效,即挂起


它可能看起来还可以,但仍然不可以。

如果“d”仍然引用“value”,并且“d”是类型为“double&”的非常量左值引用,同意吗?那么您是否尝试过将“d”绑定到类型为“double”的右值?

如果“d”仍然引用“value”,而“d”是类型为“double&”的非常量左值引用,同意吗?那么您是否同意ed将“d”绑定到“double”类型的右值?

欢迎使用未定义的行为区域。“那么为什么我得到正确的值5.45?”未定义的行为是未定义的。欢迎使用未定义的行为区域。“那么为什么我得到正确的值5.45?”未定义的行为是未定义的。
// seems ok 5.45