我々は次のようにシンプルなダミーのクラスを作成する場合:なぜイニシャライザリストは、1つのコピーだけでなく、2つのデータのコピーをファンクションに渡すのですか?
struct example {
example() { std::cout << "Create" << std::endl; }
example(const exam&) { std::cout << "Copy" << std::endl; }
example(example &&) noexcept { std::cout << "Move" << std::endl; }
}
を、初期化リスト(std::initializer_list<example>
)でそれを渡します
some_function({example()});
出力(GCC/C++ 11から)されます:
Create
Copy
Copy
あなたはその後、たとえばオブジェクト自体を作成initializer_list
を通してそれを渡すように、これは私には意味がありません。つまり、元のオブジェクトを持ち、リストにオブジェクトのコピーがあり、関数にリスト(例のオブジェクトではありません)のコピーがあり、オブジェクトの単一の作成でなければならないことを暗示します。初期化子リスト
期待出力:
Create (from example())
Copy (into initializer_list)
TL; DR:オブジェクトが初期化に渡さなった場合に2つのオブジェクトのコピーの代わりの1をインスタンス初期化子リストを通じて自分のオブジェクトを渡すのはなぜリスト自体は?
#include <iostream>
#include <initializer_list>
struct example {
example() { std::cout << "Create" << std::endl; }
example(const example &) { std::cout << "Copy" << std::endl; }
example(example &&) noexcept { std::cout << "Move" << std::endl; }
};
void some_function(std::initializer_list<example> input) {
for (example exam : input) {
std::cout << &exam << std::endl;
}
}
int main()
{
example exam;
some_function({exam});
}
質問している内容の完全でコンパイル可能な例を投稿してください。 –
2番目のコピーが 'initializer_list'自体から来ていることをどのように知っていますか?リストで実際にやっている 'some_function()'とは何ですか? 'some_function()'はどのように宣言されていますか? –
@NeilButterworthの例を編集して追加します。 –