Memeber 变量作为 C++ 中的类变量是如何发生的?

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 像类变量一样工作?我在网上搜索,发现它被称为聚合并且出于某些原因使用它,但我不明白为什么会发生这种情况?编译器如何做到这一点?

你能不能给我解释一下。
感谢上一个。

joh*_*ohn 5

您的代码具有未定义的行为,它根本不需要以任何方式工作。

问题来了

class X {
    int& i;
public:
    X(int k = 100) : i(k) {}
    ...
};
Run Code Online (Sandbox Code Playgroud)

k是局部变量,构造函数的参数。一旦构造函数退出,它就不再存在。

但是您的代码引用了该局部变量。所以你的类最终引用了一个不再存在的对象。这是未定义的行为。

PS 我不确定您所说的类变量与成员变量是什么意思。对我来说,这些术语的意思是一样的。但是无论你看到什么奇怪的行为,它都是由你的程序具有的未定义行为来解释的,如上所述。

PPS 我看到类变量是静态成员变量,有道理,所以忽略上一段。