构造函数必须在C++中初始化成员变量吗? 我已经知道构造函数是用来初始化C++类中的成员变量的。在所有示例中,我都看到构造函数在调用时初始化类的所有成员变量

构造函数必须在C++中初始化成员变量吗? 我已经知道构造函数是用来初始化C++类中的成员变量的。在所有示例中,我都看到构造函数在调用时初始化类的所有成员变量,c++,C++,如果我编写的构造函数只初始化部分或不初始化任何成员变量,会发生什么情况?您可以这样做。但这不是一个很好的练习,因为您将拥有一系列未初始化的成员变量,这些变量可能会产生意外的结果您可以这样做。但这并不是一个很好的练习,因为您将有一系列未初始化的成员变量,这些变量可能会产生意外的结果取决于类和您的程序。您的类和程序是否在所有情况下都需要所有这些变量。如果您的类确实需要它们,则不会发生错误或异常,否则您的程序可能会崩溃或发生其他情况。取决于类和您的程序。您的类和程序是否在所有情况下都需要所有这些变量。

如果我编写的构造函数只初始化部分或不初始化任何成员变量,会发生什么情况?

您可以这样做。但这不是一个很好的练习,因为您将拥有一系列未初始化的成员变量,这些变量可能会产生意外的结果

您可以这样做。但这并不是一个很好的练习,因为您将有一系列未初始化的成员变量,这些变量可能会产生意外的结果

取决于类和您的程序。您的类和程序是否在所有情况下都需要所有这些变量。如果您的类确实需要它们,则不会发生错误或异常,否则您的程序可能会崩溃或发生其他情况。

取决于类和您的程序。您的类和程序是否在所有情况下都需要所有这些变量。如果您的类确实需要它们,则不会发生错误或异常,否则您的程序可能会崩溃或发生其他情况。

这实际上取决于您拥有的成员变量。如果您提供了一个构造函数,并且没有在成员初始化列表中显式初始化变量,那么它将是。这是针对每个变量的

现在,默认初始化会根据您拥有的变量执行其他操作。如果您有一个内置类型,如int或bool,那么它将不会初始化为0或任何其他值,就像您有:

int value; // it has an indeterminate value
struct Foo { /*something*/ };
Foo value; // calls default constructor, i.e. initializes object
这也适用于阵列。如果它是另一个类,则将调用该类的默认构造函数,就像您有:

int value; // it has an indeterminate value
struct Foo { /*something*/ };
Foo value; // calls default constructor, i.e. initializes object

这实际上取决于您拥有哪些成员变量。如果您提供了一个构造函数,并且没有在成员初始化列表中显式初始化变量,那么它将是。这是针对每个变量的

现在,默认初始化会根据您拥有的变量执行其他操作。如果您有一个内置类型,如int或bool,那么它将不会初始化为0或任何其他值,就像您有:

int value; // it has an indeterminate value
struct Foo { /*something*/ };
Foo value; // calls default constructor, i.e. initializes object
这也适用于阵列。如果它是另一个类,则将调用该类的默认构造函数,就像您有:

int value; // it has an indeterminate value
struct Foo { /*something*/ };
Foo value; // calls default constructor, i.e. initializes object

很好。。也可以在成员函数中初始化成员变量,然后在构造函数中调用该函数。。重要的是不要忘记在使用变量之前初始化它们


简言之。。不在构造函数中初始化成员变量是可以的,只要在使用它们之前在类中的某个地方初始化它们就可以了。。也可以在成员函数中初始化成员变量,然后在构造函数中调用该函数。。重要的是不要忘记在使用变量之前初始化它们


简言之。。不在构造函数中初始化成员变量是可以的,只要在使用它们之前在类中的某个地方初始化它们。

根据我的经验,初始化所有成员变量的顺序是一个好主意,经验法则是这样的:如果您不需要自己编写任何构造函数,因为所有数据成员都知道如何初始化自己,那么就什么都不需要。如果您需要自己编写至少一个构造函数,无论您是否有需要帮助的数据成员或是否需要在构造函数中执行其他操作,都应显式初始化所有数据成员。根据我的经验,初始化所有成员变量的顺序是一个好主意,经验法则是这样的:如果您不需要自己编写任何构造函数,因为所有数据成员都知道如何初始化自己,那么就什么都不需要。如果您需要自己编写至少一个构造函数,不管您是否有需要帮助的数据成员,或者您是否需要在构造函数中执行其他操作,请显式初始化所有数据成员。另外,有趣的是,它可以依赖于编译器选项。在调试模式下,编译器可能会默认初始化变量,例如指向特定值的指针,以帮助调试帮助精确定位aw,我没有初始化此指针。但当然,它不应该被依赖,并且在发布模式下编译时通常会消失。另外,知道它可以依赖于编译器选项也很有趣。在调试模式下,编译器可能会默认初始化变量,例如指向特定值的指针,以帮助调试帮助精确定位aw,我没有初始化此指针。但当然,它不应该被依赖,并且在以发布模式编译时通常会消失。