問題

誰でも私に次のコンストラクタint Qtを使用する例を教えてください。

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

  ベストアンサー

std::initializer_listをとるコンストラクタは、list-initializationを使用すると考えられます。これは、braced初期化リストを含む初期化です。

 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で集約初期化に使用できました。

direct-initialization を使用して、イニシャライザリストを引数として渡すこともできます。

 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 List-initialization [dcl.init.list]:

コンストラクタは、最初のパラメータが std::initializer_list<E> 型の場合、あるいは E 型の場合に cv-qualified std::initializer_list<E> を参照する場合に initializer-list コンストラクタです。

list-initialization [over.match.list]による更新:

非集計クラス型Tのオブジェクトがlist-initialized(8.5.4)の場合、オーバーロード解決は2つのフェーズでコンストラクタを選択します。

  • 当初、候補関数は T クラスの initializer-list コンストラクタ(8.5.4)であり、引数リストは単一の引数としてイニシャライザリストで構成されています。

  • [...]

  同じタグがついた質問を見る

c++qtc++11initializer-list