gpt4 book ai didi

c++ - 右值和左值引用作为类中的成员变量 - 有效吗?

转载 作者:行者123 更新时间:2023-11-30 05:08:17 28 4
gpt4 key购买 nike

#include <iostream>
#include <string>
#include <vector>

class X
{
public:
int& a;
int&& b;

X(int& c, int && d):a(c), b(std::move(d))
{

}
};

X* x = nullptr;
void fun()
{

std::cout<<"Fun\n";
int l = 8;
int r = 9;
std::cout << &(l) << std::endl;
std::cout << &(r) << std::endl;
x = new X(l, std::move(r));
}

int main()
{
fun();

std::cout << x->a << std::endl;
std::cout << &(x->a) << std::endl;

std::cout << x->b << std::endl;
std::cout << &(x->b) << std::endl;

}

=> 成员变量引用(lvaluervalue)的值会是垃圾吗?
我看到不同编译器的行为不同。所以想知道 c++ 标准对此有何看法。

最佳答案

您将引用成员绑定(bind)到局部变量,这些变量将在退出函数 fun() 时被销毁。之后,两个引用都变为悬空,对它们的任何取消引用都会导致 UB。

左值和右值引用成员都是如此。

关于c++ - 右值和左值引用作为类中的成员变量 - 有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46933924/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com