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

时间:2017-01-18 17:41:51

标签: qt c++11 initializer-list qvector uniform-initialization

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

现在我想初始化一个具有特定大小的<{1}} ,因此我需要调用QVector<int>构造函数(doc here)。

但是,QVector(int size)也有以下构造函数: QVector

因此,当我初始化我的变量时:QVector(std::initializer_list<T> args) ,它不会使用 100 元素的大小来初始化我的QVector,而是调用另一个构造函数构造一个QVector 一个 元素值 100

如何调用QVector<int> foo{ 100 };构造函数但仍使用统一初始化语法

1 个答案:

答案 0 :(得分:1)

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

QVector<int> v(100);

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

QVector<int> v{100};

现在已经完成,它总是知道这是初始化列表,即插入1个100元素,而不是100个默认元素。

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