Visual Studio C++ 编译器在局部变量对象上的奇怪行为
Visual Studio C++ Compiler strange behavior, on Local variable objects
我对 C++ 编程和编程本身都比较陌生,我试图建立对 Visual studio C++ 代码编译器预期行为的熟悉程度。 ( Visual Studio 2015 )
class aClass {
public:
int a;
int b;
}
然后在函数块中,当我声明一个对象时 class:
aClass obj;
cout << obj.a;
然后我真的有一次获得随机 RAM 内容作为变量的值,而其他时候我得到编译错误:局部变量未初始化。 (值得注意的是,只要编译器克服错误一次,它就再也不会重复它,尽管它可能会在第一次克服错误之前重复多次!)
关于声明对象的最佳实践的任何建议,
我是否应该坚持使用 aClass obj = aClass();
形式以获得一致的结果。
或任何相关意见。提前致谢。
当您从 class 或结构声明变量时,会构造对象,但不会自动初始化其中的数据。由您来初始化数据。
没有初始化的成员变量的值将是不确定的并且以任何方式使用它们(甚至从它们读取)都是未定义的行为.
根据class或结构,初始化数据的方式不同。如果您定义了构造函数,那么我建议您使用构造函数初始化列表。如果你有一个 POD-type 结构(就像你在代码中显示的那样),你可以简单地做一些像
aClass obj = {}; // Basically the same as `aClass obj = aClass()`
Any advice on best practice of declaring objects
是的,不调用未定义的行为怎么样?您正在读取未初始化的变量;有时编译器会检测到它,有时却不会检测到它,您会看到出现垃圾。
你是怎么处理的? 在读取变量之前初始化变量!
我对 C++ 编程和编程本身都比较陌生,我试图建立对 Visual studio C++ 代码编译器预期行为的熟悉程度。 ( Visual Studio 2015 )
class aClass {
public:
int a;
int b;
}
然后在函数块中,当我声明一个对象时 class:
aClass obj;
cout << obj.a;
然后我真的有一次获得随机 RAM 内容作为变量的值,而其他时候我得到编译错误:局部变量未初始化。 (值得注意的是,只要编译器克服错误一次,它就再也不会重复它,尽管它可能会在第一次克服错误之前重复多次!)
关于声明对象的最佳实践的任何建议,
我是否应该坚持使用 aClass obj = aClass();
形式以获得一致的结果。
或任何相关意见。提前致谢。
当您从 class 或结构声明变量时,会构造对象,但不会自动初始化其中的数据。由您来初始化数据。
没有初始化的成员变量的值将是不确定的并且以任何方式使用它们(甚至从它们读取)都是未定义的行为.
根据class或结构,初始化数据的方式不同。如果您定义了构造函数,那么我建议您使用构造函数初始化列表。如果你有一个 POD-type 结构(就像你在代码中显示的那样),你可以简单地做一些像
aClass obj = {}; // Basically the same as `aClass obj = aClass()`
Any advice on best practice of declaring objects
是的,不调用未定义的行为怎么样?您正在读取未初始化的变量;有时编译器会检测到它,有时却不会检测到它,您会看到出现垃圾。
你是怎么处理的? 在读取变量之前初始化变量!