C ++中隐式默认构造函数的默认值

时间:2013-10-01 01:17:02

标签: c++

当这个问题出现时,我正在浏览C ++对象模型。如果调用默认构造函数,则类的数据成员的默认值是什么?

例如

class A
{
     int x;
     char* s;
     double d;
     string str;       // very high doubt here as string is a wrapper class
     int y[20];
     public :
     void print_values()
     {
         cout<<x<<' '<<s<<' '<<d<<' '<<str<<' '<y[0]<<' '<<y<<endl;
     }
}

int main()
{
    A temp;
    temp.print_values(); // what does this print?
    return 0;
}

2 个答案:

答案 0 :(得分:1)

当你分配它时,你无法真实地预测你的记忆中会有什么。 可能有很多东西,因为你正在阅读的内存未被设置为0(或者我应该说的其他内容)。 大多数情况下,您会发现小可执行文件中的数值为0。

答案 1 :(得分:1)

无论变量存在于何处,未初始化变量的值都是未定义的。

未定义并不一定意味着零,或特别是任何东西。例如,在许多调试版本中,内存中填充了一个可用于检测无效内存访问的模式。这些被剥离用于发布版本,其中内存只是在找到它时保留。