为什么这会返回意外值?
why does this return a unexpected value?
# 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 会将此标记为警告。
相关文章:
- 三元运算符在返回语句中给出意外的结果
- QT 和 JIRA Rest API: /rest/api/2/issue/createmeta 意外返回韩语的 iss
- 为什么这会返回意外值?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- C++ 三角函数返回意外值
- 裸__declspec上的 memcpy 返回意外的字节
- C++ std::find() 寻址返回向量的类函数时的意外行为
- 在C 中读取二进制文件会返回意外值
- 在 winapi 回调函数上返回 FALSE 时出现意外行为(循环被跳过?
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- OpenCL - 内核方法返回意外结果
- system() 返回错误语法错误:"("意外
- 从指针返回对象时出现意外的析构函数调用
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- C :Bool方法在COUT语句之后返回意外数字
- 文件设置正确,但eof()和peek()意外地从新流返回了错误的值
- 用户定义的功能的意外返回值
- VS2012 std::函数运算符 bool 意外返回 true
- GCC优化导致意外返回值
- 意外返回主函数和排序字符串函数