2

C++ ヘッダーなしで同じ効果を達成できます<initializer_list>か?

class initializer_list住む必要がありますかnamespace std(コンパイラはこれを必要としますか)?

ビッグ ファイブ (GCC、MSVC、Intel、Clang、Comeau) で動作するソリューションで問題ありません

4

1 に答える 1

4

標準に従って密結合されています。これは、コンパイラで構築された配列のラッパーです (ただし、標準では正確に述べられていません — GCC はポインターとサイズでコンストラクターを使用しますが、MSVC は 2 つのポイントでコンストラクターを使用します)。stdはい、それは namespaceと header にある必要があります<initializer_list>

サポートする各コンパイラで使用されているコンストラクターを確認し、それをバージョンで複製する必要がありますが、TBH、要点がわかりません。

テンプレートstd::initializer_listは事前定義されていません。を使用する前にヘッダー<initializer_list>が含まれていない場合std::initializer_list(型に名前が付けられていない暗黙の使用 (7.1.6.4) であっても)、プログラムの形式は正しくありません。

型のオブジェクトはstd::initializer_list<E>、実装が型 E の N 個の要素の配列を割り当てたかのように、初期化子リストから構築されます。ここで、N は初期化子リスト内の要素の数です。その配列の各要素は、初期化子リストの対応する要素でコピー初期化され、std::initializer_list<E>オブジェクトはその配列を参照するように構築されます。

于 2012-01-06T18:35:35.883 に答える