3

C++ リファレンス ページから次のようなコードを見つけました。

#include <algorithm>
#include <list>
#include <vector>
#include <functional>

int main()
{
    std::list<int> l = {-4, -3, -2, -1, 0, 1, 2, 3, 4};
    std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
    return 0;
}

これは「例」セクションの抜粋です。コードは期待どおりにコンパイルおよび実行されます。しかし、それはどのように可能ですか?はstd::reference_wrapper<int>デフォルトで構築可能ではありません。どうやってstd::vectorそれらのものを作ることができますか?std::vector私は常に動的配列として想像していました。しかし、OS から新たに与えられたメモリのブロックをどのように初期化できますstd::listか?

これは紛らわしい質問のように聞こえるかもしれませんが、何らかの理由で、上記のコードで何が起こっているのか完全には理解できません。何が起こっているのですか?

4

3 に答える 3

6

そこにはデフォルトの初期化がないため、機能します。リストの要素は、ベクターのコピー初期化に使用されます。

たとえば、次の場合は機能しません。

std::vector<std::reference_wrapper<int>> v(42);
于 2013-08-22T14:11:48.880 に答える