0

所以我有以下代码:

#include<iostream>
using namespace std;

class baseClass
{
public:
    int objID;

    /*baseClass()
    {}
    */
};


int main(int argc, char** argv)
{
    baseClass bcObj;
    cout << "bcObj.objID: " << bcObj.objID << endl;
    return 0;
}

现在,如果我尝试运行它,我会收到关于使用未初始化变量的运行时错误。但是如果我添加一个默认构造函数(取消注释构造函数),它工作正常。它仍然打印出垃圾值,但打印时没有运行时错误。

为什么会有这种差异?默认构造函数不对 objID 做任何事情。我正在使用 Visual Studio 2013(禁用语言扩展)。

谢谢你。

4

1 回答 1

0

在这两种情况下,它都是未定义的行为。您的编译器仅足够聪明,可以检测到这两种情况之一。

于 2015-01-12T04:53:38.263 回答