Ena*_*mya 0 c++ reference class class-variables member-variables
我有个问题。我目前正在用 C++ 编写一个小例子,无法弄清楚解释。这是我的问题:
#include <iostream>
using namespace std;
class X{
int& i ; /* int i; */
public :
X(int k=100):i(k){ }
X(`const` X& x):i(x.i){}
void setI(int k){i=k;}
int getI(){cout <<"adresse: "<< &i << " Contenue: "<<i<<endl ; return i;}
};
int main(){
int i =7;
X a(i);
a.getI();
a.setI(5);
a.getI();
cout << "the value of i is: " << i << endl;
X b(a);
b.getI();
cout << "the value of i is: " << i << endl;
X c;
c.getI();
a.getI();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我不明白的是,为什么类 X 中的变量成员 i 像类变量一样工作?我在网上搜索,发现它被称为聚合并且出于某些原因使用它,但我不明白为什么会发生这种情况?编译器如何做到这一点?
你能不能给我解释一下。
感谢上一个。
您的代码具有未定义的行为,它根本不需要以任何方式工作。
问题来了
class X {
int& i;
public:
X(int k = 100) : i(k) {}
...
};
Run Code Online (Sandbox Code Playgroud)
k是局部变量,构造函数的参数。一旦构造函数退出,它就不再存在。
但是您的代码引用了该局部变量。所以你的类最终引用了一个不再存在的对象。这是未定义的行为。
PS 我不确定您所说的类变量与成员变量是什么意思。对我来说,这些术语的意思是一样的。但是无论你看到什么奇怪的行为,它都是由你的程序具有的未定义行为来解释的,如上所述。
PPS 我看到类变量是静态成员变量,有道理,所以忽略上一段。