用户定义的构造函数初始化

时间:2014-11-27 05:02:49

标签: c++ initialization

考虑以下计划:

#include <iostream>

struct A
{
    A(int, int){ std::cout << "A(int, int)" << std::endl; }
};

A a(4,4);
A b{4,4};
A c({4,4});

int main(){ }

输出:

A(int, int)
A(int, int)
A(int, int)

DEMO

我有兴趣在abc的初始化之间有区别吗?任何主题都是直接初始化的。

1 个答案:

答案 0 :(得分:2)

A a(4,4);

沼泽标准直接初始化

A b{4,4};

沼泽标准直接列表初始化。由于A没有initializer_list构造函数,因此最终会执行与上面相同的操作。不会构造或销毁任何std::initializer_list对象。

A c({4,4});

直接初始化 c来自A临时,而 copy-list-initialized 来自支撑-init-list {4, 4}。请注意,如果A::A(int, int)explicit,这将无效,因为在这种情况下,复制列表初始化将是格式错误的,并且您没有可行的构造函数来调用。临时建筑和破坏可以省略,通常是。