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

std::initializer_list<T> as constructor parameter and uniform initialization syntax

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

现在我想用特定大小初始化一个QVector<int>,所以我需要调用QVector(int size)构造函数(文档here).

然而,QVector 也有以下构造函数: QVector(std::initializer_list<T> args)

所以当我像这样初始化我的变量时:QVector<int> foo{ 100 };,它不会用 size100[=41] 来初始化我的 QVector =] 元素,而是调用另一个构造 QVector with one [=34= 的构造函数]值的元素 100.

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

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

QVector<int> v(100);

原因是不然会引起歧义。编译器不知道什么是

QVector<int> v{100};

正如现在所做的那样,它始终知道这是初始化列表,即插入 100 个元素中的 1 个,而不是 100 个默认元素。

注意,这不是 Qt-specific,在 STL 中也是如此。