为什么这会返回意外值?

why does this return a unexpected value?

本文关键字:意外 返回 为什么      更新时间:2023-10-16
# include <iostream>
using namespace std;

class Something
{
public:
int data;

Something(int data)
{
data = data; //
}
};
int main()
{   
Something s = Something(4);
cout << s.data << endl; 
return 0;
}

当我运行上面的代码时,我得到了输出 32764。我知道可以通过更改数据=数据来修复 (*this(.data = data 或 this->data = data。我只是认为上面的代码也可以工作。

你应该更喜欢初始化而不是赋值:

Something(int data) : data(data) {}

在代码中data是局部变量,即传递给构造函数的参数。您正在将data的值分配给实际上不执行任何操作的data

这里: data(data)构造函数初始值设定项列表的特殊语法。data(...)是类成员,而...(data)是参数。请注意,这是一种特殊情况,您可以通过完全相同的名称引用两个不同的变量。您仍然可以为参数使用不同的名称,您选择的内容仅基于意见、个人参考以及您必须遵守的可能编码标准。

Something(int data)
{
data = data; //
}

我认为这是一种非常糟糕的编码方式。您已经定义了一个重写类级变量的方法,这是一个非常糟糕的主意。要解决此问题,您可以执行以下两项操作之一:

Something(int _data)
{
data = _data; //
}
Something(int data)
{
this->data = data; //
}

我做第一个。我认为隐藏类变量是邪恶的,但你会发现很多代码执行第二个,至少在构造函数中是这样。许多 IDE 会将此标记为警告。