c++ - Visual Studio C++ 编译器在局部变量对象上的奇怪行为

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

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

class aClass {

   public:
     int a;
     int b;
}

然后在函数 block 中,当我声明此类的对象时:

aClass obj;
cout << obj.a;

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

关于声明对象的最佳实践的任何建议,

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

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

最佳答案

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

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

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

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

关于c++ - Visual Studio C++ 编译器在局部变量对象上的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41804898/

相关文章:

c++ - 在两行之间检测 visual studio c++ 中的内存泄漏

visual-studio - Visual Studio Community 2015 可以轻松更新到 Visual Studio Professional 2015

c# - VS 2010 无法正常工作并在 Windows 10 中安装 Visual Studio 2010 SP1 更新

windows - Visual Studio 2008 安装程序项目 - 自定义操作未触发

javascript - 将 JSON 字符串转换为函数参数

javascript - 创建新对象并使用 fs.writeFile() 写入文件

c++ - 如何在windows上安装<QtCharts>

c++ - VC++ 中的函数级链接是否有任何负面影响?

c++ - "boost::mpl::identity<T>::type"在这里有什么意义?

C++ 多态性 : Checking data type of sub class