列表初始化-vs-成员初始化器列表

19

列表初始化,成员初始化器列表,初始化列表,傻傻搞不清楚

唉,为什么总有刁民乱起名

std::initializer_list

(译:花括号初始化器列表)

简介:
可以将其理解为类/模板类

备注:
这表示一种花括号数据类型 {x, y, ...}
当然,这也是一种普通的数据类型,其他类型怎么用,它就可以怎么用,如:

std::initializer_list<int> foo = {1, 2, 3, 4} // 声明此类型数据并赋值
auto foo = {1, 2, 3, 4} // 同上
void func_bar(std::initializer_list<int> arg_var) {} // 声明此类型数据为形参

中英文链接:
https://zh.cppreference.com/w/cpp/utility/initializer_list
https://en.cppreference.com/w/cpp/utility/initializer_list

List initialization

(译:列表初始化)

简介:
Initializes an object from braced-init-list
(译:从 花括号初始化器列表 初始化对象)

备注:
这是一种语法,一种使用花括号数据初始化 变量语法 ,如:

std::vector<int> mem{1,2,3}; // 直接列表初始化
std::vector<int> mem = {1,2,3}; // 赋值列表初始化

中英文链接:
https://zh.cppreference.com/w/cpp/language/list_initialization
https://en.cppreference.com/w/cpp/language/list_initialization

member initializer lists

(译:成员初始化器列表)

简介:
In the definition of a constructor of a class, member initializer list specifies the initializers for direct and virtual bases and non-static data members
(译:在类的构造函数定义中,成员初始化器列表 指定各个直接和虚基类和各个非静态数据成员的初始化器)

备注:
这是一种语法,一种使用花括号数据初始化 成员变量语法,如:

class Foo
{
public:
    // 也可以将 列表初始化 应用到 成员初始化器列表中
    //Foo(int i, int j) : m_data_i{i}, m_data_j{j}
    Foo(int i, int j) : m_data_i(i), m_data_j(j)
    {
        m_data_k = m_data_i + m_data_j;
    }
    int m_data_i;
    int m_data_j;
    int m_data_k;
}

似乎很多人都称其为:初始化列表,这很容易与上面提到的列表初始化搞混,我在中文网站 https://zh.cppreference.com 翻了很久也没有找到初始化列表这个名词,所以我认为这是对成员初始化器列表的无脑简写。

中英文链接:
https://zh.cppreference.com/w/cpp/language/constructor
https://en.cppreference.com/w/cpp/language/constructor

小记

                       列表初始化
                     /
std::initializer_list
                     \
                       成员初始化器列表