std::initializer_list<T> 作为构造函数参数和统一初始化语法



一段时间以来,我使用 C++11 统一初始化语法{}来初始化所有变量。

现在我想初始化一个具有特定大小的QVector<int>,所以我需要调用QVector(int size)构造函数(此处为文档)。

但是,QVector还具有以下构造函数: QVector(std::initializer_list<T> args)

因此,当我像这样初始化我的变量时:QVector<int> foo{ 100 };,它不会用 100 个元素的大小初始化我的 QVector,而是调用另一个构造函数,该构造函数用一个值为100 的元素构造 QVector。

如何调用 QVector(int size) 构造函数,但仍使用统一初始化语法

你正在尝试做不可能的事情。获取具有特定大小的构造函数的唯一方法是使用()括号:

QVector<int> v(100);

原因是否则会导致歧义。编译器不知道什么是

QVector<int> v{100};

就像现在所做的那样,它总是知道这是初始值设定项列表,即插入 100 个元素中的 1 个,而不是 100 个默认元素。

请注意,这不是特定于Qt的,在STL中,它的工作方式相同。

最新更新