0

第一种情况:

class x
{
public:
    x(){}
    int mem;
}

第二种情况:

class x
{
public:
    int mem;
}

int main()
{
    x a;
    std::cout << a.mem; //member not initialized error in second case
}

如果我们不定义默认构造函数,编译器会加一个;构造函数的功能是初始化内存。那么为什么在第二种情况下会出错,而在第一种情况下却没有呢?

4

2 回答 2

2

在任何一种情况下,成员变量m都没有被初始化。您需要在构造函数中显式初始化它

class x
{
public:
    x() : mem{} {}
    int mem;
};
于 2012-08-23T04:10:19.577 回答
1

您在类 def 末尾缺少分号 - 这是您的问题。也不要认为默认构造函数会初始化您的成员变量,除非它们也是需要以某种方式初始化的类

class x
{
public:
    int mem;
};

int main()
{
    x a;
    std::cout << a.mem; //member not initialized error in second case
}
于 2012-08-23T04:07:57.137 回答