Memeber变量作为C++中的类变量是怎么做到的?

问题描述 投票:0回答:1

我有一个问题。我目前正在用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;
}

我不明白的是为什么X类中的变量成员i会像类变量一样工作?我在网上搜索了一下,发现这叫 agregation,而且它的使用有一定的原因,但是我不明白为什么会出现这种情况?编译器是怎么做到的?

请您给我解释一下。 谢谢在上。

c++ class reference class-variables member-variables
1个回答
5
投票

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

问题是这样的

class X {
    int& i;
public:
    X(int k = 100) : i(k) {}
    ...
};

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

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

PS 我不知道你说的类变量和成员变量是什么意思。对我来说,这些术语的意思是一样的。但无论你看到的是什么奇怪的行为,都可以用你的程序中的未定义行为来解释,就像上面描述的那样。

PPS我看类变量的意思是静态成员变量,有道理,所以忽略前一段。

© www.soinside.com 2019 - 2024. All rights reserved.