类内成员初始化程序和初始化列表之间的冲突解决

迈克尔·戈德施泰因

让我在问题之前添加以下代码:

struct A
{
  explicit A(int i):a_{i} {}

  int a_
};

struct B
{
  B():mya_{5} {} // Initialize mya_ (again?)

  A mya_{7}; // Initialize mya_
};

struct B中,类的初始值设定项mya_mya_B构造函数的初始值设定项列表中进行初始化之间存在冲突这是如何解决每个C ++标准,哪些应的终值mya_.a_是当B的建设完成?

juanchopanza

初始化列表获胜。如果您有另一个不初始化成员的构造函数,则就地初始化将获胜。

例如,

struct B
{
  B():mya_{5} {}
  B(int) {}
  A mya_{7};
};

int main
{
  B b0;    // b.mya_.a_ is 5
  B b(42); // b.mya_.a_ is 7
}

12.6.2版开始初始化基和成员[class.base.init]

如果给定的非静态数据成员同时具有大括号或相等初始化程序和mem初始化程序,则执行由mem初始化程序指定的初始化,并且非静态数据成员的大括号或相等初始化程序为忽略了。[示例:给定

struct A {
int i = /∗ some integer expression with side effects ∗/ ;
A(int arg) : i(arg) { }
// ...
};

A(int)构造函数将简单地将i初始化为arg的值,并且不会发生i的大括号或相等初始化器中的副作用。—结束示例]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类的初始化和初始化列表中

来自分类Dev

大括号或相等初始化程序和初始化列表之间的C ++评估顺序?

来自分类Dev

如果成员是模板类,则在初始化列表中初始化某个类的成员

来自分类Dev

C ++类静态成员初始化

来自分类Dev

C ++成员级初始化,副本初始化和默认初始化

来自分类Dev

使用统一初始化语法使用初始化程序列表进行类内成员初始化?

来自分类Dev

在类的成员初始化器列表中初始化std :: tuple

来自分类Dev

C ++模板和派生类成员初始化

来自分类Dev

具有“ min”成员的类的C ++初始化列表

来自分类Dev

具有非静态成员初始化程序的类的C ++ 11聚合初始化

来自分类Dev

错误C2797:成员初始化程序列表中的列表初始化

来自分类Dev

c2797成员初始化程序列表中的列表初始化或未实现的非静态数据成员初始化程序

来自分类Dev

通过成员初始化列表初始化结构

来自分类Dev

成员初始化列表中的初始化

来自分类Dev

{} vs.()类成员的初始化

来自分类Dev

类成员初始化的最佳实践

来自分类Dev

初始化模板类的静态成员

来自分类Dev

std :: vector类成员的初始化

来自分类Dev

初始化聚合为类成员

来自分类Dev

就地成员初始化和聚合初始化

来自分类Dev

使用聚合初始化和成员初始化程序初始化结构

来自分类Dev

初始化禁止复制的成员类

来自分类Dev

初始化静态类成员

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

类参考成员列表初始化

来自分类Dev

初始化数组列表中的特定类成员

来自分类Dev

在类声明或构造函数初始化器列表中初始化简单成员

来自分类Dev

初始化类成员的最佳方法?

来自分类Dev

成员初始化

Related 相关文章

  1. 1

    在类的初始化和初始化列表中

  2. 2

    大括号或相等初始化程序和初始化列表之间的C ++评估顺序?

  3. 3

    如果成员是模板类,则在初始化列表中初始化某个类的成员

  4. 4

    C ++类静态成员初始化

  5. 5

    C ++成员级初始化,副本初始化和默认初始化

  6. 6

    使用统一初始化语法使用初始化程序列表进行类内成员初始化?

  7. 7

    在类的成员初始化器列表中初始化std :: tuple

  8. 8

    C ++模板和派生类成员初始化

  9. 9

    具有“ min”成员的类的C ++初始化列表

  10. 10

    具有非静态成员初始化程序的类的C ++ 11聚合初始化

  11. 11

    错误C2797:成员初始化程序列表中的列表初始化

  12. 12

    c2797成员初始化程序列表中的列表初始化或未实现的非静态数据成员初始化程序

  13. 13

    通过成员初始化列表初始化结构

  14. 14

    成员初始化列表中的初始化

  15. 15

    {} vs.()类成员的初始化

  16. 16

    类成员初始化的最佳实践

  17. 17

    初始化模板类的静态成员

  18. 18

    std :: vector类成员的初始化

  19. 19

    初始化聚合为类成员

  20. 20

    就地成员初始化和聚合初始化

  21. 21

    使用聚合初始化和成员初始化程序初始化结构

  22. 22

    初始化禁止复制的成员类

  23. 23

    初始化静态类成员

  24. 24

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  25. 25

    类参考成员列表初始化

  26. 26

    初始化数组列表中的特定类成员

  27. 27

    在类声明或构造函数初始化器列表中初始化简单成员

  28. 28

    初始化类成员的最佳方法?

  29. 29

    成员初始化

热门标签

归档