どうやって渡すか。それが問題だ。
Tweet
あえて非効率なコードを書く理由など どこにもない |
まー、こんなクラスがあったとして。
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)
Tweet