我有以下代码:

#include <iostream>
using namespace std;

class Base
{
private:
    int i;
    char ch;
public:
    void showdata()
    {
        cout<<"Int:"<<i<<endl;
        cout<<"Char:"<<ch<<endl;
    }
    //int pub_data ;
} ;

int main()
{
    Base ob;
    ob.showdata() ;
    //cout<<"Public Data:"<<ob.pub_data<<endl;
    return 0;
}

该程序可以编译并正常运行。输出显示i初始化为0,ch初始化为'\0'。
如果您注意到我在该程序中已注释掉2条语句。首先是公共(public)数据pub_data的声明,其次是主要打印该公共(public)数据的行。
现在的问题是,如果我取消注释这两行,则类i的数据成员(即ch,pub_data)似乎未初始化,并且在打印时它们将显示垃圾值。
所以我的问题是公共(public)数据在这里有什么不同?
我正在使用g++ 3.4.6

最佳答案

int和char都不会自动初始化为0。它发生的事实只是运气。

您需要添加一个执行初始化的构造函数:

Base() : i(0), ch(0) {}

关于c++ - 类数据默认初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2167050/

10-11 23:04
查看更多