7

次のコンストラクタintQtを使用する例を教えてください。

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

1 に答える 1

11

std::initializer_listlist-initializationを使用する場合は、をとるコンストラクターが考慮されます。これは、中括弧で囲まれた初期化リストを含む初期化です。

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

これはC++11の機能であることに注意してください。実際、最初の構文はC ++ 11の新機能ですが、2番目の構文は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]:

コンストラクターは、最初のパラメーターがタイプであるか、あるタイプのcv修飾を参照している場合、および他のパラメーターがないか、他のすべてのパラメーターにデフォルトの引数(8.3.6)がある場合、初期化子リストコンストラクターです。std::initializer_list<E>std::initializer_list<E>E

§13.3.1.7list-initialization[over.match.list]による初期化:

非集約クラスタイプのオブジェクトTがリスト初期化(8.5.4)される場合、オーバーロード解決は2つのフェーズでコンストラクターを選択します。

  • 最初、候補関数はクラスの初期化子リストコンストラクター(8.5.4)でTあり、引数リストは単一の引数としての初期化子リストで構成されます。

  • [...]

于 2013-03-26T15:46:28.653 に答える