如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

Yue Wang

假设:

class Foo
{
public: 
    Foo();
    Foo(typeA a);
private:
    typeB b;
    typeC c;
};

Foo::Foo(typeA a)
{
    //do something with a, but nothing with b nor c.
}

int main()
{
    typeA a;
    Foo foo(a);
    return 0;
}

这里会发生什么?foo.b并且foo.c默认初始化吗?用这种方式定义构造函数是一种好习惯吗?

juanchopanza

foo.b和foo.c是否默认初始化?

是的,数据成员将被隐式默认初始化但是默认初始化的作用取决于要初始化的对象的类型。对于用户定义的类型,这意味着将调用其默认构造函数。对于内置或POD,这意味着将不执行初始化因此,这取决于typeA并且typeB是:

如果它们是用户定义的类型,则将调用其默认构造函数。如果它们是内置的或PODS,则不会进行初始化。

用这种方式定义构造函数是一种好习惯吗?

假设您具有用户定义类型的数据成员,那么这更多地取决于惯例和编码标准。我已经看到它对两种方法都提出了争论:一方面,如果值初始化和隐式默认初始化做相同的事情(与用户定义的类型一样),为什么要显式地对值初始化数据成员进行赋值?可能会说您不知道自己在做什么。另一方面,为什么不对所有事情都明确?如果将数据类型从用户定义的类型更改为内置的类型,却忘记将其添加到构造函数的初始化列表中怎么办?我倾向于站在“我知道我在做什么”的角度,但这纯粹是个人的。

如果您的数据成员是内置的或POD,那么它实际上可以归结为您自己的代码的要求:您是否想对成员进行零初始化?通常您会这样做,但是这种初始化并非免费提供,在某些情况下可能很重要。这就是在C ++中默认情况下这些类型不会初始化为零的原因。因此,同样,没有明确的答案,但是在我处理过的大多数实际代码中,确实希望成员被零初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

来自分类Dev

如果在c ++构造函数中以错误的顺序初始化对象数据,会发生什么样的错误

来自分类Dev

如果没有或只有部分字段在构造函数初始化会发生什么

来自分类Dev

为什么即使base具有用户声明的构造函数,零初始化也会发生?

来自分类Dev

如果我在ReactJS或React Native的类的构造函数中使用setState()函数,将会发生什么?

来自分类Dev

用户提供的默认构造函数为什么导致未初始化的成员?

来自分类Dev

通过用户定义的构造函数进行初始化

来自分类Dev

在构造函数中初始化const char *-会发生内存泄漏吗?

来自分类Dev

c++ 中未初始化的类成员会发生什么?

来自分类Dev

如果在已经初始化的变量上使用`var`会发生什么情况

来自分类Dev

如果未初始化int,会发生什么情况?

来自分类Dev

当您调用构造函数(新类)时,实例初始化程序块首先运行会发生什么事情?

来自分类Dev

如果在其自己的构造函数中实例化对象,会发生什么?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

来自分类Dev

Simulink:子系统初始化后会发生什么?

来自分类Dev

已声明但未初始化的变量:会发生什么?

来自分类Dev

Java:在创建时将值传递给对象时,应该被初始化的成员会发生什么情况?

来自分类Dev

为什么我的类构造函数不初始化其成员变量?

来自分类Dev

为什么就地成员初始化在C ++ 11中使用副本构造函数?

来自分类Dev

为什么基类的成员不保留构造函数中首次初始化的值?

来自分类Dev

为什么成员初始化程序在移动时会调用额外的构造函数调用?

来自分类Dev

在构造函数中对数组数据成员进行零初始化

来自分类Dev

从构造函数中的std :: istream初始化const类数据成员

来自分类Dev

静态和非静态成员数据的初始化和构造函数的顺序

来自分类Dev

空且默认的构造函数和成员初始化

来自分类Dev

构造函数中初始化嵌套成员的语法?

来自分类Dev

C ++成员初始化和构造函数

Related 相关文章

  1. 1

    如果用户定义的构造函数省略了数据成员的初始化,将会发生什么?

  2. 2

    如果在c ++构造函数中以错误的顺序初始化对象数据,会发生什么样的错误

  3. 3

    如果没有或只有部分字段在构造函数初始化会发生什么

  4. 4

    为什么即使base具有用户声明的构造函数,零初始化也会发生?

  5. 5

    如果我在ReactJS或React Native的类的构造函数中使用setState()函数,将会发生什么?

  6. 6

    用户提供的默认构造函数为什么导致未初始化的成员?

  7. 7

    通过用户定义的构造函数进行初始化

  8. 8

    在构造函数中初始化const char *-会发生内存泄漏吗?

  9. 9

    c++ 中未初始化的类成员会发生什么?

  10. 10

    如果在已经初始化的变量上使用`var`会发生什么情况

  11. 11

    如果未初始化int,会发生什么情况?

  12. 12

    当您调用构造函数(新类)时,实例初始化程序块首先运行会发生什么事情?

  13. 13

    如果在其自己的构造函数中实例化对象,会发生什么?

  14. 14

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  15. 15

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  16. 16

    为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

  17. 17

    Simulink:子系统初始化后会发生什么?

  18. 18

    已声明但未初始化的变量:会发生什么?

  19. 19

    Java:在创建时将值传递给对象时,应该被初始化的成员会发生什么情况?

  20. 20

    为什么我的类构造函数不初始化其成员变量?

  21. 21

    为什么就地成员初始化在C ++ 11中使用副本构造函数?

  22. 22

    为什么基类的成员不保留构造函数中首次初始化的值?

  23. 23

    为什么成员初始化程序在移动时会调用额外的构造函数调用?

  24. 24

    在构造函数中对数组数据成员进行零初始化

  25. 25

    从构造函数中的std :: istream初始化const类数据成员

  26. 26

    静态和非静态成员数据的初始化和构造函数的顺序

  27. 27

    空且默认的构造函数和成员初始化

  28. 28

    构造函数中初始化嵌套成员的语法?

  29. 29

    C ++成员初始化和构造函数

热门标签

归档