繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM