【问题标题】:Memeber variable as class variable in C++ how does it happen?成员变量作为 C++ 中的类变量是如何发生的?
【发布时间】:2020-08-16 21:19:38
【问题描述】:


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

所以我不明白的是为什么变量成员 i 在 X 类像类变量一样工作?我在网上搜索并发现 它被称为聚合并且出于某些原因而使用它,但是 我不明白为什么会这样?编译器是怎么做的 那个?

请您向我解释一下。
感谢上一页。

【问题讨论】:

  • 为什么你认为i 表现得像一个类变量?你期望什么行为,你实际得到什么?
  • 创建多个实例后,我发现 i 引用了相同的变量
  • 在这种情况下,声明它static
  • 感谢您的建议,但我只想了解它的行为。

标签: c++ class reference class-variables member-variables


【解决方案1】:

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

问题来了

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多