【问题标题】:Printing out uninitialized member variable. With and without default constructor打印出未初始化的成员变量。有和没有默认构造函数
【发布时间】:2015-01-12 04:48:46
【问题描述】:

所以我有以下代码:

#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(禁用语言扩展)。

谢谢。

【问题讨论】:

  • 如果在发布模式下编译,运行时错误是否仍然触发?复制错误的确切文本也会很有帮助。
  • Visual Studio 中的一些调试功能,只有在 debug 中编译时才能使用
  • 你是对的。它不会在更多版本中发生。只有调试。非常感谢你们。我在想构造函数中有一些隐藏的东西。

标签: c++ initialization default-constructor member-variables


【解决方案1】:

在这两种情况下都是未定义的行为。您的编译器只够聪明地检测这两种情况之一。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 2015-06-21
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多