# 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。我知道可以通过更改data = data来解决 (* this).data =数据或this-> data =数据。我只是以为上面的代码也可以解决。
答案 0 :(得分:2)
您应该更喜欢初始化而不是赋值:
Something(int data) : data(data) {}
在代码data
中是局部变量,该参数传递给构造函数。您正在将data
的值分配给data
,这实际上不执行任何操作。
这里: data(data)
是构造函数初始值设定项列表的特殊语法。 data(...)
是类成员,而...(data)
是参数。请注意,这是一种特殊情况,您可以通过完全相同的名称来引用两个不同的变量。您仍然可以为参数使用其他名称,您选择的名称仅基于观点,个人见解以及可能要遵循的编码标准。
答案 1 :(得分:0)
Something(int data)
{
data = data; //
}
我认为这是一种非常糟糕的编码方式。您已经定义了一个覆盖类级变量的方法,这是一个非常糟糕的主意。要解决此问题,您可以执行以下两项操作之一:
Something(int _data)
{
data = _data; //
}
Something(int data)
{
this->data = data; //
}
我做第一个。我认为隐藏类变量是邪恶的,但是至少在构造函数中,您会发现很多执行第二种操作的代码。许多IDE会将其标记为警告。