問題タブ [rvo]

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.

0 投票する
2 に答える
415 参照

c++ - コンストラクターのない標準的なレイアウト構造体を持つ RVO

バイナリ メッセージを表す構造体があります。バッファから次のそのようなレコードを取得する関数を書きたい (ファイルかソケットかは関係ありません):

今、私はこれを次のように書くことができます:

これは素晴らしいことであり、RVO の利点を私に与えてくれます。ただし、のデフォルト コンストラクターがRecord呼び出されます。これは、回避したい機能を実行する非自明なデフォルト コンストラクターを持つ型で構成されている可能性があります。これらは必ずしも POD 型ではありませんが、標準レイアウトです。

getNext()コンストラクター (デフォルトまたはコピー/移動) を回避するように記述する方法はありますRecordか? 理想的には、ユーザーが呼び出すとき:

バッファは のメモリに直接読み込まれますrecord。これは可能ですか?

0 投票する
2 に答える
282 参照

c++ - ローカル オブジェクトのメンバーを返す方法

次のコードを検討してください。

getBigData()コピー省略/移動セマンティクスに関して実装する最良の方法は何ですか? この実装では、コンパイラは移動できないようbigDataです。次の機能をテストしました。

これらの実装の結果を説明し、ローカル オブジェクトのメンバーを返す最も効果的な方法を示してください。

0 投票する
2 に答える
285 参照

c++ - RVO は "new" で動作しますか?

この状況でコピー省略が発生しますか? 言い換えれば、コピー省略を使用する最新のコンパイラは、ここでコピー コンストラクターを呼び出すことを回避しますか?

オブジェクトをポインターに格納することを目指しています。オブジェクトは関数によって返されます。コピーせずに保存したい。

C++11が使えない

0 投票する
1 に答える
98 参照

c++ - const-overload と RVO のコード重複の回避

const-overload を扱うときにコードの重複を避けるために、次のように書きました。

const_castは非 const バージョンで使用されます。それ以外の場合は、const-method での非 const 関数呼び出しになり、おそらくオブジェクトが変更され、気付かれずに回避されるためです ( const_cast. また、非 const から const への const キャストは問題を引き起こさないはずです。

そして、ここでの質問は次のとおりです。オブジェクトを const_cast できないため、呼び出されたlightCopy()オブジェクトが const オブジェクトを返し、実際の戻り値の型が const ではないため、RVO は不可能であり、追加のコピーが作成される可能性はありますか?

0 投票する
2 に答える
439 参照

c++ - ラムダ式と RVO

「戻り値の最適化」の概念は C++ コンパイラのラムダ式に適用されますか? コンパイラと最適化パラメータに依存することは知っていますが、理論的には可能ですか?

ところで、VS.NET 2013以降でこの問題について知っている人はいますか?

0 投票する
1 に答える
56 参照

c++ - (N)RVO は、値が既存のオブジェクトにコピーされているときにも発生しますか?

(N)RVO は、戻り値が新しい変数に代入されるときに一時オブジェクトの不要なコピーと作成を回避するのに役立ちます (したがって、コピー コンストラクターを回避します)。

したがって、次のようなものは RVO で最適化する必要があります。

しかし、呼び出しサイト オブジェクトが既に存在する場合にも発生しますか? (=つまり、コピー コンストラクターの代わりに演算子が使用される場合)。私はこれに関する文献を見つけようとしましたが、(N)RVO は常にコピー コンストラクターを回避するという観点から説明されているようです。この場合、呼び出しサイト オブジェクトを変更しても実際に安全かどうかはわかりません。