タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

C++とc++とRVOに関するtake-yuのブックマーク (2)

  • NRVO(Named Return Value Optimization)が適用されたか判定するマクロ - ビットハイブ

    NRVO(Named Return Value Optimization)が適用されたか判定するマクロ 注: この記事は連休中にボケた頭を戻すため書いたものなので、あまり役には立つ記事ではありません。 C++で関数/メソッドでオブジェクトを返したい時がありますが、以下のようにオブジェクトを返す関数/メソッドでは、コピーにかかるコストが気になります。C言語をそれなりにやってきた人であれば、このように、(Tのサイズが大きいものだったとして)大きいデータを値渡しで返すようなことは普通しません。ただ、C++ではRVO(Return Value Optimization)という最適化が働き、呼び出し元(main)のt変数が直接初期化されるので、コピーは発生しません。このため、コピーコストを気にせずオブジェクトをどんどん返していけます。 RVOの例 T exampleRVO() { return T(

  • NRVO(RVO)とMove Semantics - 神様なんて信じない僕らのために

    ムーブセマンティクスについて調べたところで自分が気になったこと。 BigFatMovableObject GetBigFatMovableObject() { BigFatMovableObject mo; return mo; } int main() { BigFatMovableObject mo(GetBigFatMovableObject()); return 0; } 最初、自分はこれが適切なムーブコンストラクタを呼び出す、 と考えたんだけど、(どうみてもコピーよりムーブの方がコストが安い状況なので) 実際にはNRVOといった最適化によって、 「移動もコピーも発生しない状況」にされてしまった訳です。 これは駄目だ!! と思ってvectorでやったわけですが、 意外とNRVO(RVO)って知られてないこともあるのかと思い書いてみる次第。 NRVOとは、 名前付き戻り値の最適化 (

    NRVO(RVO)とMove Semantics - 神様なんて信じない僕らのために
  • 1