为什么返回一个意外值?

时间:2019-12-04 17:41:14

标签: c++

# 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 =数据。我只是以为上面的代码也可以解决。

2 个答案:

答案 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会将其标记为警告。