右值和左值引用作为 class 中的成员变量 - 有效吗?
Rvalue and lvalue references as member variable in a class - Valid?
#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;
}
=>成员变量引用(lvalue
和rvalue
)的值会是垃圾吗?
我看到不同编译器的行为不同。所以想知道 c++ 标准对此有何评论。
您将引用成员绑定到局部变量,这些变量将在退出函数时销毁 fun()
。在那之后,两个引用都变成悬垂的,对它们的任何取消引用都会导致 UB。
左值和右值引用成员都是如此。
#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;
}
=>成员变量引用(lvalue
和rvalue
)的值会是垃圾吗?
我看到不同编译器的行为不同。所以想知道 c++ 标准对此有何评论。
您将引用成员绑定到局部变量,这些变量将在退出函数时销毁 fun()
。在那之后,两个引用都变成悬垂的,对它们的任何取消引用都会导致 UB。
左值和右值引用成员都是如此。