Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual Studio C++;局部变量对象上的编译器奇怪行为 我对C++编程和编程本身比较陌生,我试图建立对C++代码的VisualStudio编译器的预期行为的熟悉程度。(Visual Studio 2015)_C++_Visual Studio_Object_Compiler Errors_Local Variables - Fatal编程技术网

Visual Studio C++;局部变量对象上的编译器奇怪行为 我对C++编程和编程本身比较陌生,我试图建立对C++代码的VisualStudio编译器的预期行为的熟悉程度。(Visual Studio 2015)

Visual Studio C++;局部变量对象上的编译器奇怪行为 我对C++编程和编程本身比较陌生,我试图建立对C++代码的VisualStudio编译器的预期行为的熟悉程度。(Visual Studio 2015),c++,visual-studio,object,compiler-errors,local-variables,C++,Visual Studio,Object,Compiler Errors,Local Variables,然后在函数块内,当我声明此类的对象时: aClass obj; cout << obj.a; aClass-obj; cout当您从类或结构中声明变量时,将构造对象,但其中的数据不会自动初始化。由您来初始化数据 没有初始化的成员变量的值将是不确定的,以任何方式使用它们(甚至从中读取)都是未定义的行为 根据类或结构的不同,初始化数据的方式也不同。如果您定义了构造函数,那么我建议您使用构造函数初始值设定项列表。如果您有一个POD类型的结构(就像您在代码中显示的那样),您可以简单地执行以

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

aClass obj;
cout << obj.a;
aClass-obj;

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

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

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

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

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

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

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

aClass obj = {};  // Basically the same as `aClass obj = aClass()`
关于声明对象的最佳实践有什么建议吗

是的,不调用未定义的行为如何?您正在读取未初始化的变量;有时编译器会检测到它,有时它不会,您会看到垃圾出来

你是怎么处理的?在读取变量之前初始化变量

关于声明对象的最佳实践有什么建议吗

是的,不调用未定义的行为如何?您正在读取未初始化的变量;有时编译器会检测到它,有时它不会,您会看到垃圾出来


你是怎么处理的?在读取变量之前初始化变量

您的类缺少用于初始化成员变量的构造函数。默认情况下,具有运行时生存期的变量不会初始化。而其他时候,我会收到编译错误:如果我记得正确,则未初始化局部变量-这是一个警告,不是错误。您的类缺少用于初始化成员变量的构造函数。默认情况下,具有运行时生存期的变量不会初始化。而在其他情况下,我会收到编译错误:如果我记得正确,则不会初始化局部变量-这是一个警告,而不是错误。感谢您的回答,顺便说一句,当我在类中显式声明一个默认构造函数时,那么任何声明的对象都将由我的默认构造函数初始化,这对于自动默认构造函数来说是不正确的,因此这就是我的问题背后的原因。这根本不是一个愚蠢的问题,但当我提供默认构造函数时,它的行为似乎与编译器提供时有所不同。和往常一样,无论谁在匆忙中阅读,都会给出错误的答案,这意味着对某个问题的装腔作势“缺乏足够的意识”。不包括这个答案。Thanks@Physician一个小小的澄清:如果你定义了一个构造函数,那么光是它还不足以初始化成员变量,你需要显式地初始化它们(除非它们有一个构造函数来初始化它自己的成员)。是的,毫无疑问,我认为这是一个有价值的建议。但实际上,当类类型具有显式默认构造函数时,如果单独编写语句((type identifier;),而没有任何显式初始值设定项,则不会导致编译器将对象视为“未初始化”,绝对不会是字面意义上的。感谢您的回答,顺便说一句,当我在类中显式声明一个默认构造函数时,那么任何声明的对象都将由我的默认构造函数初始化,这对于自动默认构造函数来说是不正确的,因此这就是我的问题背后的原因。这根本不是一个愚蠢的问题,但当我提供默认构造函数时,它的行为似乎与编译器提供时有所不同。和往常一样,无论谁在匆忙中阅读,都会给出错误的答案,这意味着对某个问题的装腔作势“缺乏足够的意识”。不包括这个答案。Thanks@Physician一个小小的澄清:如果你定义了一个构造函数,那么光是它还不足以初始化成员变量,你需要显式地初始化它们(除非它们有一个构造函数来初始化它自己的成员)。是的,毫无疑问,我认为这是一个有价值的建议。但是实际上,当类类型有一个显式的默认构造函数时,那么单独编写语句((type identifier;))而没有任何显式的初始值设定项,就不会导致编译器认为对象“未初始化”,而不是字面意义上的。