Visual Studio C ++编译器奇怪的行为,对局部变量对象

时间:2017-01-23 11:06:51

标签: c++ visual-studio object compiler-errors local-variables

我对C ++编程和编程本身比较陌生,我试图建立对C ++代码的Visual Studio编译器的预期行为的熟悉程度。 (Visual Studio 2015)

class aClass {

   public:
     int a;
     int b;
}

然后在功能块内部,当我声明这个类的对象时:

aClass obj;
cout << obj.a;

然后我确实有一次得到随机RAM内容作为变量的值,而其他时候我得到编译错误:局部变量未初始化。 (值得注意的是,每当编译器克服错误一次时,它就不会再次重复它,尽管它可能会在第一次克服错误之前多次重复它!)

关于声明对象的最佳做法的任何建议,

我是否应该坚持使用aClass obj = aClass();形式来获得一致的结果。

或任何相关意见。提前谢谢。

2 个答案:

答案 0 :(得分:5)

当您从类或结构声明变量时,将构造对象,但内部数据不会自动初始化。由您来初始化数据。

没有初始化的成员变量的值将是 indeterminate ,并且以任何方式使用它们(甚至从它们读取)是未定义的行为

根据类或结构,初始化数据的方式不同。如果您定义了构造函数,那么我建议您使用构造函数初始化列表。如果您有POD类型的结构(就像您在代码中显示的结构),您可以简单地执行类似

的操作
aClass obj = {};  // Basically the same as `aClass obj = aClass()`

答案 1 :(得分:1)

  

关于声明对象的最佳做法的任何建议

是的,如何调用未定义的行为?你是从未初始化的变量中读取的;有时编译器检测到它,有时它没有检测到它,你会看到垃圾出现。

你是如何处理的? 在读取变量之前初始化变量!