有人能给我提供一个使用以下构造函数的Qt示例吗?
QVector::QVector(std::initializer_list<T> args);
有人能给我提供一个使用以下构造函数的Qt示例吗?
QVector::QVector(std::initializer_list<T> args);
当您使用列表初始化时,一个接受 std::initializer_list
的构造函数会被考虑。这是一种涉及到用大括号初始化的方式:
QVector<int> v{1, 2, 3, 4, 5};
// or equivalently
QVector<int> v = {1, 2, 3, 4, 5};
QVector<int> v({1, 2, 3, 4, 5});
由于构造函数不是explicit
的,因此它还可以以其他一些有趣的方式使用:
Passing a QVector
argument:
void foo(QVector<int>);
foo({1, 2, 3, 4, 5});
Returning a QVector
:
QVector<int> bar()
{
return {1, 2, 3, 4, 5};
}
§8.5.4 列表初始化 [dcl.init.list]:
如果一个构造函数的第一个参数是类型为
std::initializer_list<E>
或引用到可能带有cv限定符的std::initializer_list<E>
的某个类型E
,并且要么没有其他参数,要么所有其他参数都具有默认参数(8.3.6),那么这个构造函数就是一个初始化列表构造函数。
§13.3.1.7 通过列表初始化进行初始化 [over.match.list]:
当非聚合类类型
T
的对象进行列表初始化 (8.5.4) 时,重载解析会分两个阶段选择构造函数:
最初,候选函数是类
T
的初始化列表构造函数 (8.5.4),而参数列表由初始化列表作为单个参数组成。[...]
Fun(QVector<int>)
,那么可以这样调用它吗:Fun(QVector<int>{1,2})
?谢谢。 - user1899020QVector
的这个构造函数并不是explicit
,所以你甚至可以执行Fun({1, 2, 3})
。 - Joseph Mansfield