0

考虑以下代码示例:

class MyClass {
    public:
    MyClass( float f, char a );

    private:
    int b;
};

通过这样声明,整数 b的初始值是否被默认设置为零?

如果可能,我可以更改 b 的值吗:(请记住,以下代码将被多次调用,并且每次分配给 b 的值都是该过程的下一次迭代所必需的)

int fg = int(ds/r);
int temp1;
if(b==0) {
    temp1=0;
}

temp1=b;
b=fg;
4

4 回答 4

3

默认情况下它没有被初始化。

在 C++ 11 中,您可以编写:

private:
    int b = 0;

现在,如果您没有明确说明,该类的任何构造函数都将初始化bwith的值0

于 2013-04-26T11:28:51.707 回答
2

通过这样声明,整数 b 的初始值是否被默认设置为零?

这完全取决于您的构造函数的实现。如果你不做任何事情,那么 的值b是未指定的。

为确保将其设置为0,您需要在构造函数实现中使用类似的内容:

 MyClass::MyClass( float f, char a ) : b() {}

请注意,在 C++11 中,您可以在声明时初始化数据成员,因此您可以这样做:

class MyClass {
  public:
    MyClass( float f, char a );

  private:
    int b = 0; // or int b{0}, but not int b(0)
};
于 2013-04-26T11:25:40.507 回答
1

如果您不在构造函数中对其进行初始化,则变量b不会被初始化0(建议在成员初始化器列表中对其进行初始化)

MyClass( float f, char a ) : b(0) { }
于 2013-04-26T11:25:54.490 回答
0

变量未初始化,这意味着它的值未定义(随机垃圾)。

您可以根据需要设置值。没有问题(只要 b 已经初始化)。

于 2013-04-26T11:27:14.280 回答