【问题标题】:Construct std::vector using initializer list with one element [duplicate]使用具有一个元素的初始值设定项列表构造 std::vector [重复]
【发布时间】:2020-03-02 10:06:24
【问题描述】:

考虑以下程序,定义一个包含值 13 的 std::vector:

std::vector<int> vec{13};

这也可以被解释为对构造函数的调用,该构造函数用 13 个零初始化向量。我的问题是:编译器如何在使用 initializer_list 构造 std::vector 或使用 13 个零初始化向量之间进行选择?

【问题讨论】:

标签: c++ vector initializer-list


【解决方案1】:

因为在list initialization中优先使用std::initializer_list的构造函数。

否则,将分两个阶段考虑 T 的构造函数:

  • 所有将 std::initializer_list 作为唯一参数或作为第一个参数(如果其余参数有)的构造函数 默认值,由重载决议检查和匹配 针对 std::initializer_list 类型的单个参数

  • 如果前一个阶段没有产生匹配,则 T 的所有构造函数都参与重载决议,以对抗 由支撑初始化列表的元素组成,具有限制 只允许非缩小转换。如果这个阶段 生成一个显式构造函数作为 a 的最佳匹配 复制列表初始化,编译失败(注意,简单 复制初始化,完全不考虑显式构造函数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2014-09-07
    • 2020-12-27
    • 2018-11-29
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多