具有类内初始化的默认默认构造函数的行为是什么?

无效指针

假设以下内容:

class foo
{
public:
  foo() = default;

private:
  std::string m_str = "Hello";
};

我无法在cppreference.com或C ++ 11草案上找到任何说明默认构造函数对m_str起作用的文档。我自然的假设是,如果编译器m_str已经在类中进行了初始化,则其编译器足够聪明,不会在默认的构造函数中进行初始化,但也许我错了。

谁能在这里解释初始化行为?有没有保证或未指定?

克瑞克SB

在[class.ctor] / 5中对此进行了很好的定义和指定:

[...]隐式定义的默认构造函数执行该类的初始化集,该初始化集将由该类的用户编写的默认构造函数执行,而没有ctor-initializer(12.6.2)和空的复合语句。[...]

因此,默认构造函数执行与以下操作相同的操作:

foo() {}

反过来,这会将括号或相等的初始化程序适当地应用于每个数据成员(请参阅[class.base.init] / 8)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:具有初始化列表的默认构造函数

来自分类Dev

用户声明的默认构造函数+类内初始化程序!=用户提供的构造函数?

来自分类Dev

初始化构造函数的默认参数的首选方法是什么?

来自分类Dev

为什么派生类的构造函数在初始化列表中使用基类的默认构造函数?

来自分类Dev

创建具有默认构造函数的未初始化项目数组?

来自分类Dev

创建具有默认构造函数的未初始化项目数组?

来自分类Dev

为什么使用声明的继承构造函数不使用默认构造函数初始化虚拟基类?

来自分类Dev

综合默认构造函数如何初始化已初始化的类成员?

来自分类Dev

未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

来自分类Dev

错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

来自分类Dev

基本/默认构造函数与构造函数初始化列表

来自分类Dev

为什么std :: atomic的默认构造函数不默认初始化底层存储值?

来自分类Dev

在没有构造函数的类内初始化变量

来自分类Dev

如何避免在基类初始化器中调用默认构造函数?

来自分类Dev

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

来自分类Dev

如何在默认构造函数中初始化数组?

来自分类Dev

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

来自分类Dev

具有结构初始化和默认参数的不直观行为

来自分类Dev

没有初始化列表的初始化成员变量和没有默认构造函数的类型?

来自分类Dev

默认构造函数是否总是初始化所有成员?

来自分类Dev

没有合适的默认构造函数可用于初始化ostream指针

来自分类Dev

初始化程序列表没有适当的默认构造函数可用错误

来自分类Dev

{}或初始化构造函数的默认值之间是否有任何区别

来自分类Dev

没有默认构造函数时,使用垃圾数据初始化对象

来自分类Dev

是否有必要在构造函数初始化列表中调用默认ctor吗?

来自分类Dev

使用类成员函数/变量初始化默认参数

来自分类Dev

默认初始化具有许多布尔值的类吗?

来自分类Dev

默认初始化具有许多布尔值的类吗?

来自分类Dev

具有std :: string属性的默认移动构造函数行为

Related 相关文章

  1. 1

    C ++:具有初始化列表的默认构造函数

  2. 2

    用户声明的默认构造函数+类内初始化程序!=用户提供的构造函数?

  3. 3

    初始化构造函数的默认参数的首选方法是什么?

  4. 4

    为什么派生类的构造函数在初始化列表中使用基类的默认构造函数?

  5. 5

    创建具有默认构造函数的未初始化项目数组?

  6. 6

    创建具有默认构造函数的未初始化项目数组?

  7. 7

    为什么使用声明的继承构造函数不使用默认构造函数初始化虚拟基类?

  8. 8

    综合默认构造函数如何初始化已初始化的类成员?

  9. 9

    未初始化的串行端口属性是否具有使用默认构造函数时的默认值?

  10. 10

    错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

  11. 11

    基本/默认构造函数与构造函数初始化列表

  12. 12

    为什么std :: atomic的默认构造函数不默认初始化底层存储值?

  13. 13

    在没有构造函数的类内初始化变量

  14. 14

    如何避免在基类初始化器中调用默认构造函数?

  15. 15

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

  16. 16

    如何在默认构造函数中初始化数组?

  17. 17

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

  18. 18

    具有结构初始化和默认参数的不直观行为

  19. 19

    没有初始化列表的初始化成员变量和没有默认构造函数的类型?

  20. 20

    默认构造函数是否总是初始化所有成员?

  21. 21

    没有合适的默认构造函数可用于初始化ostream指针

  22. 22

    初始化程序列表没有适当的默认构造函数可用错误

  23. 23

    {}或初始化构造函数的默认值之间是否有任何区别

  24. 24

    没有默认构造函数时,使用垃圾数据初始化对象

  25. 25

    是否有必要在构造函数初始化列表中调用默认ctor吗?

  26. 26

    使用类成员函数/变量初始化默认参数

  27. 27

    默认初始化具有许多布尔值的类吗?

  28. 28

    默认初始化具有许多布尔值的类吗?

  29. 29

    具有std :: string属性的默认移动构造函数行为

热门标签

归档