C++ “int&;我是阶级的财产

C++ “int&;我是阶级的财产,c++,C++,当int&i是类的属性时会发生什么?构造器做了什么?堆栈和内存?我写了一个演示来解释这个问题。我在我的计算机上运行它,并获得特定运行的结果: 45 2000572096 演示是: #include <iostream> class A{ public: A(int a, int b):i1(a),i2(b){}; public: int i1; int &i2; }; int main() { A a(45,60); std::

int&i
是类的属性时会发生什么?构造器做了什么?堆栈和内存?我写了一个演示来解释这个问题。我在我的计算机上运行它,并获得特定运行的结果:

45  2000572096
演示是:

#include <iostream>
class A{
public:
    A(int a, int b):i1(a),i2(b){};

public:
    int i1;
    int &i2;
};

int main()
{
    A a(45,60);
    std::cout << a.i1 << " " << a.i2 << std::endl;
    return 0;
}
#包括
甲级{
公众:
A(inta,intb):i1(A),i2(b){};
公众:
int i1;
int&i2;
};
int main()
{
A(45,60);

std::cout作为引用的类成员变量只能构造,不能赋值。 此代码从构造函数参数
intb
构造变量
int&i2

参数非常类似于局部变量,调用后它们就不再存在了

所以,i2现在指的是一个不再存在的整数,这是未定义的

这就是为什么您会得到奇怪的输出

顺便说一句,出于好奇,引用通常作为指针实现,并隐藏使用运算符的地址。因此,引用中的指针现在可能指向堆栈上的参数int b所在的位置,但正如我前面所说的,它不再存在,因此如果引用是access,则会产生未定义的行为D
您可以在web上搜索“返回对局部变量的引用”以了解更多信息。

这是未定义的行为,因为
i2
正在引用局部变量(
b
)一旦构造函数完成,它就会被销毁。

它做了什么?这是未定义的。尝试定义
int param_i2=60
并传递此值…打开警告(
-Weverything
),如果您的编译器足够聪明,您将收到一条消息,说明您正在将临时绑定到
i2
@Lundin,感谢您修复语法/拼写。