use*_*020 7 c++ qt initializer-list c++11
有人给我一个例子来使用以下构造函数int Qt吗?
QVector::QVector(std::initializer_list<T> args);
Run Code Online (Sandbox Code Playgroud)
Jos*_*eld 11
std::initializer_list使用列表初始化时会考虑使用a的构造函数.这是一个涉及支撑初始化列表的初始化:
QVector<int> v{1, 2, 3, 4, 5};
// or equivalently
QVector<int> v = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个C++ 11功能.实际上,第一种语法对于C++ 11来说是新的,而第二种语法可能已经在C++ 03中用于聚合初始化.
您还可以使用直接初始化并将初始化列表作为参数传递:
QVector<int> v({1, 2, 3, 4, 5});
Run Code Online (Sandbox Code Playgroud)
由于构造函数不是explicit,它也可以用于其他一些有趣的方式:
通过QVector论证:
void foo(QVector<int>);
foo({1, 2, 3, 4, 5});
Run Code Online (Sandbox Code Playgroud)退回QVector:
QVector<int> bar()
{
return {1, 2, 3, 4, 5};
}
Run Code Online (Sandbox Code Playgroud)§8.5.4列表初始化[dcl.init.list]:
构造函数是初始化列表构造函数,如果它的第一个参数是类型
std::initializer_list<E>或引用,可能std::initializer_list<E>是某些类型的cv-qualifiedE,并且没有其他参数,或者所有其他参数都有默认参数(8.3.6).
§13.3.1.7按列表初始化初始化[over.match.list]:
当非聚合类类型的对象
T被列表初始化(8.5.4)时,重载决策分两个阶段选择构造函数:
最初,候选函数是类的初始化列表构造函数(8.5.4),
T参数列表由初始化列表作为单个参数组成.[...]
| 归档时间: |
|
| 查看次数: |
11584 次 |
| 最近记录: |