隐式与显式默认构造函数调用

扎伊德·汗(Zaid Khan)

假设我对以下两种用于创建调用默认构造函数(由编译器提供)的对象的方法的知识是正确的。

class A
{
    int a,b;
    //No programmer defined constructor
}
...
A o1; //Implicit Call I believe
A o2 = A(); //Explicit Call

为什么会A o2 = A();导致对象的成员(a,b)o2使用默认值(0)初始化自身而不是A o;(它们使用垃圾值初始化)?它是未定义的行为吗?

永远

引文来自标准p8.5 / 1

这里没有用户定义的构造函数,因此,编译器将使用默认的构造函数。并且默认构造函数将不会用零初始化成员。

如果未为对象指定初始化程序,则该对象将被默认初始化。

要默认初始化类型T的对象意味着:

如果T是(可能是cv限定的)类类型(第9条),则考虑构造函数。列举了适用的构造函数(13.3.1.3),并通过重载解析(13.3)选择了最适合初始化器()的构造函数。如此选择的构造函数将被调用,并带有一个空的参数列表以初始化对象。

在第二种情况下将是值初始化。

一个其初始化程序是一组空括号(即())的对象,应进行值初始化。

值初始化类型T的对象意味着:

如果T是(可能是cv限定的)类类型,而没有用户提供或删除的默认构造函数,则将该对象初始化为零,并检查默认初始化的语义约束,并且T是否具有非平凡的默认构造函数,该对象是默认初始化的;

零初始化类型T的对象或引用意味着:

如果T是(可能是cv限定的)非联合类类型,则将每个非静态数据成员和每个基类子对象初始化为零,并将填充初始化为零位;

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

隐式超级构造函数Person()未定义。必须显式调用另一个构造函数?

来自分类Dev

C ++中隐式Default构造函数的默认值

来自分类Dev

C ++隐式转换构造函数调用

来自分类Dev

在复制初始化中,对复制构造函数的调用是显式还是隐式的?

来自分类Dev

C ++:派生类隐式调用显式构造函数

来自分类Dev

对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

来自分类Dev

Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

来自分类Dev

C ++ 11隐式副本构造函数,同时显式实现构造函数

来自分类Dev

用户提供的构造函数与显式默认的构造函数

来自分类Dev

默认构造函数无法处理隐式超级构造函数引发的异常类型IOException。必须定义一个显式构造函数

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

显式默认默认构造函数和聚合

来自分类Dev

显式默认的构造函数做什么?

来自分类Dev

从隐式到显式函数定义

来自分类Dev

显式默认模板构造函数

来自分类Dev

从定义的副本构造函数调用默认(隐式)副本构造函数

来自分类Dev

C ++隐式默认构造函数的意义是什么?

来自分类Dev

隐式调用函数

来自分类Dev

如何隐式调用类的默认函数

来自分类Dev

用户定义的构造函数和隐式默认构造函数

来自分类Dev

隐式与显式删除副本构造函数

来自分类Dev

为什么C ++隐式调用父默认构造函数?

来自分类Dev

对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

来自分类Dev

Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

来自分类Dev

默认和显式构造函数

来自分类Dev

C ++ 11:默认构造函数:隐式还是显式?

来自分类Dev

C ++隐式默认构造函数的意义是什么?

来自分类Dev

显式强制调用构造函数?

来自分类Dev

AngelScript - 避免运行隐式默认构造函数

Related 相关文章

  1. 1

    隐式超级构造函数Person()未定义。必须显式调用另一个构造函数?

  2. 2

    C ++中隐式Default构造函数的默认值

  3. 3

    C ++隐式转换构造函数调用

  4. 4

    在复制初始化中,对复制构造函数的调用是显式还是隐式的?

  5. 5

    C ++:派生类隐式调用显式构造函数

  6. 6

    对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

  7. 7

    Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

  8. 8

    C ++ 11隐式副本构造函数,同时显式实现构造函数

  9. 9

    用户提供的构造函数与显式默认的构造函数

  10. 10

    默认构造函数无法处理隐式超级构造函数引发的异常类型IOException。必须定义一个显式构造函数

  11. 11

    C ++隐式和显式继承构造函数调用

  12. 12

    显式默认默认构造函数和聚合

  13. 13

    显式默认的构造函数做什么?

  14. 14

    从隐式到显式函数定义

  15. 15

    显式默认模板构造函数

  16. 16

    从定义的副本构造函数调用默认(隐式)副本构造函数

  17. 17

    C ++隐式默认构造函数的意义是什么?

  18. 18

    隐式调用函数

  19. 19

    如何隐式调用类的默认函数

  20. 20

    用户定义的构造函数和隐式默认构造函数

  21. 21

    隐式与显式删除副本构造函数

  22. 22

    为什么C ++隐式调用父默认构造函数?

  23. 23

    对于默认构造函数,未定义隐式超级构造函数Num()。必须定义一个显式构造函数,这背后的逻辑是什么

  24. 24

    Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

  25. 25

    默认和显式构造函数

  26. 26

    C ++ 11:默认构造函数:隐式还是显式?

  27. 27

    C ++隐式默认构造函数的意义是什么?

  28. 28

    显式强制调用构造函数?

  29. 29

    AngelScript - 避免运行隐式默认构造函数

热门标签

归档