一段时间以来,我使用 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中,它的工作方式相同。