默认构造函数初始化问题

时间:2012-08-23 04:01:47

标签: c++ visual-studio-2005

第一种情况:

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
}

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

2 个答案:

答案 0 :(得分:2)

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

中显式初始化它
class x
{
public:
    x() : mem{} {}
    int mem;
};

答案 1 :(得分:1)

你在课程结束时缺少分号 - 这是你的问题。另外,不要认为默认构造函数会初始化你的成员变量,除非它们也是需要以某种方式初始化的类

class x
{
public:
    int mem;
};

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