タグ

2014年5月13日のブックマーク (3件)

  • 暗黙の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も起きない。
  • 何が lvalue で何が rvalue なのか - iorate's blog

    こういう記事も必要かもしれないと思いました.内容はタイトルそのままです. はじめに はじめに,と書きましたがこの項は飛ばしても問題ないです. まず "lvalue" とか "rvalue" とかいうものが何についての概念なのかということですが,これらは C++ の "式" の持つ属性 "value category" の値です."式" には他に "型" という属性があります. int i = 0; i; // 式 i の型は int,value category は lvalue 0; // 式 0 の型は int,value category は rvalue 型の決め方は難しくないと思うので (たぶん),この記事では value category の決め方を書きます.以降,"i は int の lvalue である" といった言い方をします. Lvalue,rvalue のイメージ い

    何が lvalue で何が rvalue なのか - iorate's blog
    yowano
    yowano 2014/05/13
    prvalueや、xvalueといった概念についても触れている。pvalueが従来通りのlvalueなら、xvalueはrvalueへの参照のこと。
  • C++のshared_ptrを関数への引数として渡す場合はconst参照で | YOHEI's BLOG

    Channel9にて公開されているC++ and Beyond 2011の動画にて、Andrei Alexandrescu、Scott Meyers、Herb Sutterの三名が、C++ and Beyond 2011の参加者からの質問に回答している。 その中で4:34からの「On shared_ptr performance and correctness」が興味深い。 質問の主旨としては、shared_ptrを関数やメソッドへ渡す場合、const参照で渡すべきかどうかということらしい。つまり、 void func(std::shared_ptr<std::string> s) { ... } int main(int argc, char* argv[]) { std::shared_ptr<std::string> s = ...; func(s); } とするか、const参照に

    yowano
    yowano 2014/05/13
    shared_ptrを関数への引数として渡す場合はconst参照で渡す方が良い。参照カウンタの処理機構が動かない分、速度が速くなるからである。