最初の部分:
std::initializer_list
は C++11 の非常に便利な機能なので、標準ライブラリでどのように実装されているのか疑問に思いました。ここで読んだことから、コンパイラは型の配列を作成T
し、initializer_list<T>
.
また、 をコピーするinitializer_list
と、同じデータを参照する新しいオブジェクトが作成されると述べています。なぜそうなのですか? 私はそれが次のいずれかだと推測したでしょう:
- 新しいのデータをコピーします
initializer_list
- データの所有権を新しい
initializer_list
後半:
std::vector
コンストラクターの多くのオンライン参照の 1 つから:
vector (initializer_list<value_type> il,
const allocator_type& alloc = allocator_type());
(6) 初期化リストコンストラクタ
il内の各要素のコピーを同じ順序で含むコンテナを構築します。
移動のセマンティクスにはまだ慣れていませんが、 のデータをil
に移動できませんでしたvector
か? の深い実装については知りませんstd::vector
が、IIRC は単純な古い配列を使用します。