在C++类中,是否必须初始化作为数组的成员变量
In a C++ class, do you have to initialize member variables that are arrays?
例如:
class Cls
{
private:
int x;
int y;
int arr[10];
public:
Cls();
};
Cls::Cls() : x(0), y(0) {}
我的理解是,未初始化的数组将具有垃圾值。只要我在填充数组之前不编写期望数组具有特定值的代码,那么不初始化数组有什么问题吗?或者我需要这样的东西作为构造函数:
Cls::Cls() : x(0), y(0), arr() {}
初始化数组成员不需要Cls
的构造函数。如果未能初始化,则会使值不确定的元素。与流行的观点相反,具有不确定值的对象不仅仅是其值未指定的对象;事实上,在第一次给它们写明确的值之前,试图阅读它们会导致未定义的行为。因此,通常建议尽快设置这些值。
如果您的逻辑是,在设置它们之前,您肯定不会编写访问它们的代码,那么不,您不需要初始化它们。例如,如果你直接不使用数组,你可以简单地将它们组合在一起。
然而,最好对它们进行初始化,因为没有理由不进行初始化,即使您将它们初始化为坏值。可能发生的情况是,尽管你现在总是在阅读之前写作,但这种情况在未来可能会改变。6个月后,有人可能会重构一些东西,现在先读后写。因为这是未定义的行为,也许你的程序看起来运行正常,或者它可能在他们的机器上工作,但在另一台机器上崩溃。如果你初始化它们,你就不会遇到这些问题。
也许你担心的是0
是一个有效值,你不希望你的程序意外地得到这个值,你宁愿明确它没有正确初始化,但如果有未定义的行为,你可能会得到0
或其他有效值或崩溃,而且它可能不一致。如果你只是正确地初始化所有内容,你可能会感谢自己。
C++警察或编译器不会阻止你这样做,你的程序仍然可以很好地形成,但你也可以通过初始化它们来保证它。
相关文章:
- 具有推导参数的模板函数指针数组变量
- 按字母顺序对结构内数组变量中的名称进行排序
- 传递 std::数组变量作为参数
- 为什么数组变量正在更新
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 数组变量中更多变量或更多维度?
- 数组变量周围的堆栈已损坏
- 数组变量衰减为指针
- C++ 无法将字符数组变量分配给字符串变量
- 使用指针变量打印特定的数组变量
- 数组变量是C++中的引用吗?
- 数组变量未正确分配以进行循环
- 在 c++ 中向数组变量添加一个数字
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 指针和 c 样式数组变量的专用模板
- 堆栈数组变量清理
- 如何从DLL检索数组变量?(视觉C )
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- 更改了错误的数组变量