Initializer list

来自cppreference.com
< cpp‎ | language

 
 
C++ 语言
表达式
替代表示
字面量
布尔 - 整数 - 浮点
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
工具设施
特性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
隐式类型转换 - 显式类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类声明
初始化式列表
this 指针
类特有的函数属性
特殊成员函数
模板
杂项
 
(为了不被混淆性病的初始
原文:
( Not to be confused with 性病的初始 )
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
他们的一部分,它负责成员和祖先初始化的构造函数
原文:
They are the part of a constructor which is responsible for member and ancestor initialization
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 语法

constructor_signature : member_constructor_calls { constructor_body }

[编辑] 解释

初始化列表中初始化的对象应该出现的地方,是基类的构造函数和成员被称为.
原文:
The initializer list is the place where initialization of the object should occur, there is where the constructors for base classes and members are called.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
成员被初始化以相同的顺序,它们被声明,而不是像在初始化列表中出现.
原文:
Members are initialized in the same order as they are declared, not as they appear in the initializer list.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
如果一个参数的构造函数中具有相同名称的成员之一,该标识符的模糊性,通过在构造函数中调用内的intializer列表选择参数(而不是成员)解决.
原文:
If a parameter in the constructor has the same name as one of the members, the ambiguity of that identifier being passed in a constructor call inside the intializer list is resolved choosing the parameter (and not the member).
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
成员或基类中不存在该列表中的缺省构造
原文:
Members or base classes not present in the list will be default constructed
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 为例

struct Class : public Base
{
    int x;
    int y;
 
    Class ( int x )
      : Base ( 123 ), // initialize base class
        x ( x ),      // x (member) is initialized with x (parameter)
        y ( 0 )       // y initialized to 0
    {}                // empty constructor body
 
    Class ( double a )
      : y ( a+1 ),
        x ( y ) // x will be initialized before y, this means that its value here is undefined
    {}          // No base class constructor in list, this is the same as calling Base()
 
    Class()
    try
      : Base ( 789 ),
        x ( 0 ),
        y ( 0 )
    {
        // no exception
    }
    catch (...)
    {
        // exception occurred on initialization
    }
};