2016-11-25 15 views
3

私はイニシャライザリストについて少し混乱しています。STL独立したイニシャライザリスト

私はその初期化子リストは、C++の一部であり、どのようなものだと思う:、アレイと類推

struct Something { char c0, c1; }; 

Something something = { 'H', 'W' }; 

などと(私の目で)接続されている何かが(ヘッダ<initializer_list>中)STLであり、std::initializer_list<T>と呼ばれますイニシャライザリストと一致するものメソッドのパラメータ、など

std::initializer_list<char> list = { 'H', 'e', 'l', 'l', 'o' }; 

今私の混乱:私は(MSVC 2015年)auto解釈が何であるかを見てみると

auto match = { 'H', 'e', 'l', 'l', 'o' }; 

、それはstd::initializer_list<char>です。

は、だから私の質問は以下のとおりです。

あるラインとの間のC++言語とSTLライブラリ?

イニシャライザリスト(C++の意味で)の解釈方法を指定するディレクティブがありますか?

たとえば、解釈を変更することができます。 std::initializer_list<T>からT[]に?

+2

言語と標準ライブラリが連携して動作します。コンパイラは、例えばオブジェクトを作成し渡すことができる。必要に応じて 'std :: initializer_list'を呼び出します。しかし、最初の例では、構造体を初期化するときに、 'std :: initializer_list'は作成されません。それは構造の直接の初期化です。 –

+0

「STL」と書いたときに「標準ライブラリ」を意味すると仮定しています。 – MSalters

+0

@MSalters https://en.wikipedia.org/wiki/Standard_Template_Library – user4663214

答えて

0

部分的にMSDN threadに基づいて回答します。

ここで、C++言語とSTLライブラリの間の線はありますか?

標準ライブラリと純粋なC++の間の線は少し騒々しいです。 LSL、Language Support Libraryというライブラリの一部にあります。 行は次の例にあります。割り当てはstd::bad_allocを返します。 C++言語の観点からすれば、std::bad_allocは、OS API経由の直接割り当てを使用して抑制することができます。 std :: size_tの、STD :: nullptr_t等と同様 ...

次の例では、ライン、存在する場合は、ノイズが多い:のdynamic_castはstd::bad_castをスロー。 同様の不一致の例LSLとC++はイニシャライザリストです。

イニシャライザリスト(C++の意味で)の解釈方法を指定するディレクティブがありますか?

言語仕様としての指令がありますが、#pragma指令のような指令や、単純に変更できるものはありません。

たとえば、 std :: initializer_listからT []へ?

MSVCでは、おそらくどこにもない。

1

これは、C++言語とSTLライブラリの間の線があるaggregate initialization

struct Something { char c0, c1; }; 
Something something = { 'H', 'W' }; 

のですか?

標準ライブラリはC++(それは二つの別々のエンティティとしてそれらを考えても意味がありません)で書かれ、それ自体であるので、これは本当にC++言語STLライブラリの違いではありません。主なポイントは、初期化している要素の種類と使用可能なコンストラクタを区別することです。

多くの混乱は、提案と不具合報告が中括弧の初期化をどのように解釈するかについてかなりの議論を巻き起こしているという事実に由来しています(Scott Meyers articlesの一部、recently discussedもあります)。

イニシャライザリスト(C++の意味で)の解釈方法を指定するディレクティブがありますか?

それを理解する唯一の適切な方法は、あなたが(あなたが使用しているC++のバージョンやコンパイラのサポートに応じて)C++ standardディレクティブを使用して理解しているタイプを認識することができることです。

+0

答えをありがとう。言及された記事は、私を混乱させるものを正確に示しています。 – user4663214

関連する問題