在C++类中,是否必须初始化作为数组的成员变量

In a C++ class, do you have to initialize member variables that are arrays?

本文关键字:数组 变量 成员 初始化 类中 C++ 是否      更新时间:2023-10-16

例如:

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++警察或编译器不会阻止你这样做,你的程序仍然可以很好地形成,但你也可以通过初始化它们来保证它。