使用带有一个元素的初始化列表构造std :: vector [重复]

问题描述 投票:0回答:1

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

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

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

c++ vector initializer-list
1个回答
2
投票

因为在std::initializer_list中首选建设者采用list initialization

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

  • 所有将std :: initializer_list用作唯一参数的构造函数,或将其余参数作为第一个参数的构造函数检查默认值,并通过过载分辨率进行匹配针对类型为std :: initializer_list

  • 的单个参数
  • 如果上一个阶段不产生匹配,则T的所有构造函数都将针对以下参数集参与重载解析:由braced-init-list的元素组成,但有限制仅允许非缩小转换。如果这个阶段产生一个显式构造函数,作为与之的最佳匹配复制列表初始化,编译失败(注意,简单复制初始化,根本不考虑显式构造函数。

© www.soinside.com 2019 - 2024. All rights reserved.