タグ

moveに関するyowanoのブックマーク (2)

  • 参照渡し or 値渡し? - yohhoyの日記

    C++03/11における関数の引数型とコピー/ムーブ処理コストとの関係について。 記事の内容は C++Now 2012 Keynote: "Moving Forward with C++11" スライド資料(Part I, Part II) に基づく。(Part IIのpp.22-57) 型Tに対する変更操作を行う関数において、引数の型をconst参照渡し(const T&)*1または値渡し(T)とするどちらが “良い” デザインかという話。ここでは関数呼び出しから値を返すまでに生じるコピーコンストラクタ/ムーブコンストラクタの呼び出し回数によって評価する。つまり、回数が少ない方が低コスト=良いデザインという観点にたつ。 // const参照渡し; pass-by-const-reference T modify1(const T& x) { T tmp(x); tmp.modify()

    参照渡し or 値渡し? - yohhoyの日記
    yowano
    yowano 2014/05/14
    型Tに対する変更操作を行う関数において、引数の型をconst参照渡しにする場合、値渡しにする場合、const参照渡しと右辺値参照渡しの二種類を準備する場合、それぞれの挙動のまとめ。
  • 暗黙のmoveとNRVO - joynote break;

    VS2010(VC10)にて関数で返す値についての扱いをついったーで突っ込まれて実際書いて確かめた時のメモ。 #include <iostream> #include <vector> #include <boost/timer.hpp> struct Test{ std::vector<int> tmp; Test(){ std::cout << "コンストラクタ" << std::endl; } ~Test(){ std::cout << "デストラクタ" << std::endl; } Test(const Test& obj) : tmp( obj.tmp ){ std::cout << "コピーコンストラクタ" << std::endl; } Test(Test&& obj){ std::swap(tmp,obj.tmp); std::cout << "ムーブコンストラクタ" <

    暗黙のmoveとNRVO - joynote break;
    yowano
    yowano 2014/05/13
    NRVOはreturnが複数ある場合などには効かないが、C++11では関数内で宣言された変数が返り値になった場合は暗黙的にmoveされる。ただ、暗黙変換が絡む場合はやはりmoveも起きない。
  • 1