soraなりの日々 - fc2 -

こころにひっかかったもの

コードの中心でiをさがす -関数入出力編-


どうやって渡すか。それが問題だ。

このエントリーをはてなブックマークに追加







 あえて非効率なコードを書く理由など
どこにもない



まー、こんなクラスがあったとして。








class CTempData
{
public:
    CTempData()
    {
        no = 0;
        name = "";
    }
    ~CTempData() {}
 private:
    int no;
    string name;
}


んで、こんな関数があったとする(中身ナニもしてないけど)。








void function(CTempData cTempData)
{
    return;
}


そしてそして、やっぱりこんな風に複数回呼んでみて
前回と同じように時間を計る。








   start = clock();
  
   const int target = 10000000;
   while ( true ) {
       if ( iCnt == target )
           break;

       function( cTemp );
       iCnt++;
    }
 
    end = clock();


結果は、2.690000秒。
そんで、次にリファレンスで呼んでみる。

void function(CTempData& cTempData)

結果、0.240000秒
次にポインタ。

void function(CTempData* pcTempData)

結果は、0.210000秒
ただ、何回か走らせてみるとリファレンスの時と変わらなかったりもする。
実際、あんまり変わらないのかも知れない。リファレンスとポインタ。

入力専用のパラメータの場合、値渡しが必要なときもあるにはあるだろうが、
特に理由がない場合はconst つけてリファレンスで渡した方が良い。
そして、出力専用のパラメータの場合、パラメータを省略可能にするなら
ポインタにし、必須ならリファレンスっていう様に使い分ければ、
解りやすいし安全性も保たれる。

環境:PowerBook G4 1.25 GHz memory 1 GB
  :gcc version 4.0.1 (Apple Computer, Inc. build 5341)
このエントリーをはてなブックマークに追加

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/27-b229a201
この記事にトラックバックする(FC2ブログユーザー)