C++11 是所有数据成员都初始化为0,还是由自动调用的构造函数为它们分配了随机值?

C++11 是所有数据成员都初始化为0,还是由自动调用的构造函数为它们分配了随机值?,c++11,C++11,当我们不手动调用构造函数时,我尝试检查分配给数据成员的值。a和b都是0,但c都是1,那么数据成员是如何初始化的呢?随机还是0?如果它们被初始化为0,为什么我认为1是c的值 #include<iostream> using namespace std; class Class { public: int a,b,c; }; int main() { Class obj; cout<<obj.a; cout&l

当我们不手动调用构造函数时,我尝试检查分配给数据成员的值。a和b都是0,但c都是1,那么数据成员是如何初始化的呢?随机还是0?如果它们被初始化为0,为什么我认为1是c的值

#include<iostream>
using namespace std;

class Class
{
    public:
        int a,b,c;      
};

int main()
{
    Class obj;

    cout<<obj.a;
    cout<<"\n";
    cout<<obj.b;
    cout<<"\n";
    cout<<obj.c;

    return 0;
}
#包括
使用名称空间std;
班级
{
公众:
INTA、b、c;
};
int main()
{
obj类;
cout如前所述,您案例中的默认初始化将导致“未确定”,即未定义的值

编译器将为您提供一个默认构造函数,因为您没有自己定义它,也没有定义任何其他构造函数(在这种情况下它将删除它),但默认构造函数仍将使成员值未定义。您得到0和1-我得到的数字更像
1515788312

使用C++11标准,您可以通过直接在类中提供默认值来防止这种情况

#include<iostream>
using namespace std;

class Class
{
public:
    int a = 0, b = 0, c = 0;
};

int main()
{
    Class obj;

    cout<< obj.a << " "
        << obj.b << " " << obj.c << endl;

    return 0;
}
#包括
使用名称空间std;
班级
{
公众:
int a=0,b=0,c=0;
};
int main()
{
obj类;
库特
#include<iostream>
using namespace std;

class Class
{
public:
    Class() : a(1), b(2), c(3) { }
    int a, b, c;
};

int main()
{
    Class obj;

    cout<< obj.a << " "
        << obj.b << " " << obj.c << endl;

    return 0;
}