問題タブ [copy-elision]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 削除された移動/コピー ctor を持つタイプのテンポラリを返す
次のプログラムを検討してください。
サンプル セッション:
gcc が を受け入れることに驚きましたnakedBrace()
。概念的には、2 つの関数は同等であると考えました。一時的な関数がS
構築されて返されます。コピー省略は実行される場合と実行されない場合がありますが、標準 (12.8/32) で義務付けられているように、move または copy ctor (両方ともここで削除されます) は引き続きアクセス可能でなければなりません。
nakedBrace()
それは決して S を構築しないということですか? それとも、コピーの移動/ctorが概念的に必要ないように、ブレースの初期化を使用して戻り値に直接入力しますか?
c++ - コピー不可能なタイプの連鎖コピー省略
次の例を検討してください。
コピー不可能なオブジェクトの 2 つのチェーンされたコピー省略可能リターンがあります。gcc 5.2 では問題なくコンパイルされます。しかし、実際にコピーを実行しようとしているため、gcc 4.8 も clang 3.7 も好きではありません。どのコンパイラが正しいですか? この動作を許可するように gcc が意図的に変更されたと想定しています。これは、このような場合に特に役立つと思われます。
c++ - 保証されたコピー省略はどのように機能しますか?
2016 年のオウル ISO C++ 標準会議では、単純化された値のカテゴリによる保証されたコピー省略と呼ばれる提案が、標準委員会によって C++17 に投票されました。
保証されたコピー省略はどのように機能しますか? コピーの省略がすでに許可されているいくつかのケースをカバーしていますか、またはコピーの省略を保証するためにコードの変更が必要ですか?