【发布时间】:2020-03-02 10:06:24
【问题描述】:
考虑以下程序,定义一个包含值 13 的 std::vector:
std::vector<int> vec{13};
这也可以被解释为对构造函数的调用,该构造函数用 13 个零初始化向量。我的问题是:编译器如何在使用 initializer_list 构造 std::vector 或使用 13 个零初始化向量之间进行选择?
【问题讨论】:
标签: c++ vector initializer-list
考虑以下程序,定义一个包含值 13 的 std::vector:
std::vector<int> vec{13};
这也可以被解释为对构造函数的调用,该构造函数用 13 个零初始化向量。我的问题是:编译器如何在使用 initializer_list 构造 std::vector 或使用 13 个零初始化向量之间进行选择?
【问题讨论】:
标签: c++ vector initializer-list
因为在list initialization中优先使用std::initializer_list的构造函数。
否则,将分两个阶段考虑 T 的构造函数:
所有将 std::initializer_list 作为唯一参数或作为第一个参数(如果其余参数有)的构造函数 默认值,由重载决议检查和匹配 针对 std::initializer_list 类型的单个参数
如果前一个阶段没有产生匹配,则 T 的所有构造函数都参与重载决议,以对抗 由支撑初始化列表的元素组成,具有限制 只允许非缩小转换。如果这个阶段 生成一个显式构造函数作为 a 的最佳匹配 复制列表初始化,编译失败(注意,简单 复制初始化,完全不考虑显式构造函数)。
【讨论】: