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 };
,它不会用 size 的 100[=41] 来初始化我的 QVector =] 元素,而是调用另一个构造 QVector with one [=34= 的构造函数]值的元素 100.
如何调用 QVector(int size)
构造函数 但仍然使用统一的初始化语法?
你正在尝试做一件不可能的事情。获取具有特定大小的构造函数的唯一方法是使用 ()
括号:
QVector<int> v(100);
原因是不然会引起歧义。编译器不知道什么是
QVector<int> v{100};
正如现在所做的那样,它始终知道这是初始化列表,即插入 100 个元素中的 1 个,而不是 100 个默认元素。
注意,这不是 Qt-specific,在 STL 中也是如此。
一段时间以来,我使用 C++11 统一初始化语法 {}
来初始化我所有的变量。
现在我想用特定大小初始化一个QVector<int>
,所以我需要调用QVector(int size)
构造函数(文档here).
然而,QVector
也有以下构造函数:
QVector(std::initializer_list<T> args)
所以当我像这样初始化我的变量时:QVector<int> foo{ 100 };
,它不会用 size 的 100[=41] 来初始化我的 QVector =] 元素,而是调用另一个构造 QVector with one [=34= 的构造函数]值的元素 100.
如何调用 QVector(int size)
构造函数 但仍然使用统一的初始化语法?
你正在尝试做一件不可能的事情。获取具有特定大小的构造函数的唯一方法是使用 ()
括号:
QVector<int> v(100);
原因是不然会引起歧义。编译器不知道什么是
QVector<int> v{100};
正如现在所做的那样,它始终知道这是初始化列表,即插入 100 个元素中的 1 个,而不是 100 个默认元素。
注意,这不是 Qt-specific,在 STL 中也是如此。