2016-06-30 42 views
1

このコードは内部でどのように動作するか私はC++ 11に新たなんだと私は思っていた:のstd ::コンストラクタでinitializer_list変換

class MyClass 
{ 
    public: 
     MyClass(int a, double b) { 
      cout << "ctor()" << endl; 
     } 
}; 

int main() 
{ 
    MyClass i1{4, 7}; 
    return 0; 
} 

新しい初期化子リストの私の理解では、それがクラスstd::initializer_listであるということですコード内に特別な構文{ .... }で構築されています。したがって、{4, 7}によって作成されたこのクラスインスタンスは、内部的にコンストラクタに適合するフォームに変換されてMyClassになりますか?ありがとう。

+0

構文{ } '* std :: initializer_list'を作ることができます。それ以外のこともできます。 – immibis

+0

@immibisこれは私が読むことができる良いリファレンスはありますか? – hovo

+1

「有効な現代C++」の項目6を参照してください。 – Mine

答えて

1

これはどうなるかと思います。抽出された:前のステージが一致を生じない場合Explanation of list initialization at cppreference.com

、Tのすべてのコンストラクタは、制限、ブレース-INIT-listの要素で構成された引数のセットに対してオーバーロード解決に参加すること狭められない変換のみが許可されます。この段階でコピーリスト初期化に最適なコンストラクタが生成された場合、コンパイルは失敗します(単純なコピー初期化では、明示的なコンストラクタはまったく考慮されません)。

関連する問題