C++ 初始化器列表不符合顺序

C++ 初始化器列表不符合顺序,c++,initialization,initializer-list,C++,Initialization,Initializer List,因此,我创建了一个名为Dictionary的类,它继承自一个基IEnumerable,并包含一个类型为List的成员列表有一个常量unsigned int&成员,用于存储和公开其项目计数 这是字典的构造函数 Dictionary() : _list(), IEnumerable(_list.Count) { } 我将常量unsigned int&从“Initialized”列表传递到IEnumerable。问题是,IEnumerable的初始化器在\u list之前被调用(类型list的成员)

因此,我创建了一个名为
Dictionary
的类,它继承自一个基
IEnumerable
,并包含一个类型为
List
的成员<代码>列表有一个
常量unsigned int&
成员,用于存储和公开其项目计数

这是
字典
的构造函数

Dictionary() : _list(), IEnumerable(_list.Count)
{ }
我将
常量unsigned int&
从“Initialized”列表传递到
IEnumerable
。问题是,
IEnumerable
的初始化器在
\u list
之前被调用(类型
list
的成员),因此我传入了一个无效引用

有没有办法强制在基类
IEnumerable
之前初始化成员
\u list

  • 基类构造函数在继承类的构造函数之前调用
  • 成员是按照声明的顺序初始化的(通常在头文件中),初始化列表的顺序是不相关的
  • 基类构造函数在继承类的构造函数之前调用
  • 成员是按照声明的顺序初始化的(通常在头文件中),初始化列表的顺序是不相关的

  • 基类总是在直接成员之前初始化。(事实上,mem初始值设定项列表中基和成员的顺序不起任何作用-顺序始终由类定义确定。)

    一种解决方法是将成员移动到另一个基类

    struct HasList {
        List _list;
        // Might want custom constructors here.
    };
    
    class Dictionary
        : private HasList,
          public IEnumerable
    {
        // ...
    

    (这是
    private
    继承为数不多的有用用法之一。)

    基类总是在直接成员之前初始化。(事实上,mem初始值设定项列表中基和成员的顺序不起任何作用-顺序始终由类定义确定。)

    一种解决方法是将成员移动到另一个基类

    struct HasList {
        List _list;
        // Might want custom constructors here.
    };
    
    class Dictionary
        : private HasList,
          public IEnumerable
    {
        // ...
    

    (这是
    private
    继承的少数有用用法之一。)

    如何设置
    List
    Count
    数据成员?它是一个引用,所以它必须引用某个东西。它在_list的构造函数中设置。但是那是在based之后调用的。如何设置
    列表
    计数
    数据成员?它是一个引用,所以它必须引用某个东西。它在_list的构造函数中设置。但那是在棒球赛之后的事哦,我明白了。我喜欢!听起来很有创意。我想我会的:)太好了!再次感谢。它甚至不需要对现有代码进行任何重大更改:)哦,我明白了。我喜欢!听起来很有创意。我想我会的:)太好了!再次感谢。它甚至不需要对现有代码进行任何重大更改:)