最初の部分:std :: initializer_listの基本構造は何ですか?
std::initializer_list
は、C++ 11の本当に便利な機能ですので、私はそれが標準ライブラリに実装されているか疑問に思いました。私がhereと読んだところで、コンパイラは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());
同じ順序で、ILの要素のそれぞれのコピーを有する容器を構築
(6)初期化リストコンストラクタ
。まだ移動のセマンティクスには不満はありますが、
il
のデータをvector
に移動できませんでしたか?私はstd::vector
の深い実装を認識していませんが、IIRCは平凡な配列を使用しています。
cplusplus.comを信頼しない別の理由のようです。標準に目を向けると、イニシエータリストのctorに到達し、イテレータのctorが呼び出されます(emplace構築を使用して)可能ならば要素を移動します。 – Angew
cplusplus.comはひどく恐ろしいサイトで、C++コミュニティに害を及ぼします。誰かがそれをホストしているサーバーを粉砕し、ハードドライブを焼いて、コンクリートで包み込んで海の底に沈めるべきです。 –
'std :: initializer_listの根底にある構造は何ですか?'理由があるので、あなたから離れて抽象化されています。 –