コードA:すべてのconst文字列を参照することをお勧めしますか?
string a = "Hello World";
for (int i=0; i<1000000; ++i)
const string b = a;
コードB:私は別に2つのコードを実行し、CPU時間を測定した場合
string a = "Hello World";
for (int i=0; i<1000000; ++i)
const string &b = a;
は、コードBは、コードAよりも約2.5倍速かった
char
、int
、float
...のようなプリミティブ型を除いて、私はそれをコピーするのではなくオリジナルを参照する方が速いことを学んだ。
ほとんどの場合、その違いはほとんど無視できますが、常にconst string
タイプ(および他の非プリミティブタイプ)を参照することをお勧めしますか?
通常のガイドラインは次のとおりです。 'sizeof'が' sizeof(void *) 'よりも大きければ、常にconst参照を渡し、それ以外の場合はコピーを渡します。オブジェクトを変更する場合は、サイズに関係なく非const参照を渡します。 – DeiDei
例外があります。たとえば、関数の引数のコピーを作成し、値渡しする場合は暗黙的に必要なコピーを作成し、操作を効率的に行うなどの操作を利用できます。 – jaggedSpire
クラスはカスタムのコピーや代入演算子を(文字列のように)定義するかもしれないので、 'sizeof'は常にコピー時間の良い指標ではありません。 –