7

任何人都给我一个例子来使用下面的构造函数 int Qt?

QVector::QVector(std::initializer_list<T> args);
4

1 回答 1

11

std::initializer_list当您使用列表初始化时,会考虑采用一个构造函数。这是一个涉及括号初始化列表的初始化:

QVector<int> v{1, 2, 3, 4, 5};
// or equivalently
QVector<int> v = {1, 2, 3, 4, 5};

请注意,这是一个 C++11 功能。事实上,第一种语法对 C++11 来说是新的,而第二种可能在 C++03 中用于聚合初始化。

您还可以使用直接初始化并将初始化列表作为参数传递:

QVector<int> v({1, 2, 3, 4, 5});

由于构造函数不是explicit,它还可以用于其他一些有趣的方式:

  1. 传递QVector参数:

    void foo(QVector<int>);
    
    foo({1, 2, 3, 4, 5});
    
  2. 返回一个QVector

    QVector<int> bar()
    {
      return {1, 2, 3, 4, 5};
    }
    

§8.5.4 列表初始化 [dcl.init.list]:

一个构造函数是一个初始化列表构造函数,如果它的第一个参数是类型std::initializer_list<E>或引用可能 cv-qualified std::initializer_list<E>for some type E,并且要么没有其他参数,要么所有其他参数都有默认参数(8.3.6)。

§13.3.1.7 通过列表初始化 [over.match.list] 进行初始化:

当非聚合类类型的对象T被列表初始化(8.5.4)时,重载决议分两个阶段选择构造函数:

  • 最初,候选函数是类的初始化列表构造函数(8.5.4),T参数列表由初始化列表作为单个参数组成。

  • [...]

于 2013-03-26T15:46:28.653 回答