ほとんどすべての投稿で、私はSOを参照して、std::initializer_list
を含めて、人々はstd::initializer_list
を値渡しがちです。この記事によると:1が渡されたオブジェクトのコピーを作成したい場合なぜ `std :: initializer_list`は値によって渡されるのですか?
http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
1は、値によって渡す必要があります。しかしstd::initializer_list
をコピーするのは良い考えではありません。
std::initializer_list
をコピーすると、基本となるオブジェクトはコピーされません。 元のイニシャライザリストオブジェクトが終了した の有効期間の後に、基本となる配列が存在することは保証されていません。
、なぜそれのインスタンスは、多くの場合、不要なコピーを作成していないことが保証されconst&
は言って、しないことにより、値によって渡されますか?
私が理解しているように、コンパイラは、共通の「値による復帰」イディオムを識別し、代わりに「ムーブ」として最適化します。実際にはその実装にメモリコピーは含まれません。 – MatthewD
@MatthewD私たちはここに戻ることについて話しているわけではありません。 –