のは、次のサンプルを検討してみましょう:RVOが全くとどのような方法で存在禁じられたりされていない仮定の下C++標準:RVOを使用せずに参照を初期化するためにコピーで返す:コピーはありますか?
struct big_type {};
// Return by copy
auto factory() { return big_type{}; }
void any_scope_or_function() {
big_type&& lifetime_extended = factory();
}
を、またはbig_type()
コピーすることができますでしょうか?または、参考文献はreturn
の声明の中で一時的に構成されたものに直接拘束されるでしょうか?
any_scope_or_function
が終了すると、big_type
デストラクタが1回だけ呼び出されることを確認します。
私はC++ 14を使用していますが、標準のバージョン間で動作が変更されている場合があります。一時的なbig_type
を作成しようとしている
auto factory() { return big_type{}; }
big_type{}
で、その後何のRVO /コピーelisonがないと仮定すると、
@ NathanOliverコンパイラスイッチを削除するのを忘れてしまった。腐った。 –
さらに、私はC++ 17を使うことができません。 C++ 14までです。 –
@ Peregring-lkしかし、レコード用です。これは、C++で変更されました.17では、ここではコピーの削除はもう必要ありません。 –