有人给我一个例子来使用QVector :: QVector(std :: initializer_list <t> args)?</t>

时间:2013-03-26 15:44:23

标签: c++ qt c++11 initializer-list

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

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

1 个答案:

答案 0 :(得分: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};
    }
    

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

      

    构造函数是初始化列表构造函数,如果其第一个参数类型为std::initializer_list<E>,或者对某些类型std::initializer_list<E>可能引用cv限定E ,并且没有其他参数,或者所有其他参数都有默认参数(8.3.6)。

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

      

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

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

    •   
    • [...]

    •