为变量使用非初始值

时间:2013-04-26 11:23:13

标签: c++

考虑以下代码示例:

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

    private:
    int b;
};

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

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

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

temp1=b;
b=fg;

4 个答案:

答案 0 :(得分:3)

默认情况下,它未初始化。

在C ++ 11中,你可以写:

private:
    int b = 0;

现在任何类的构造函数都会使用b初始化0的值,如果你没有明确说明的话

答案 1 :(得分:2)

  

通过这样声明,是否通过deafult将整数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)
};

答案 2 :(得分:1)

如果你没有在构造函数中初始化它,那么

变量b没有初始化为0(建议在成员初始化列表中初始化它)

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

答案 3 :(得分:0)

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

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