値渡しか const 参照のどちらで渡すかを決定するための適切なルールのセットがあります。
- 関数が副作用として引数を変更する場合は、非 const 参照で取得します。
- 関数がその引数を変更せず、引数がプリミティブ型である場合は、値で受け取ります。
- それ以外の場合は、次の場合を除き、const 参照で取得します。関数が const 参照のコピーを作成する必要がある場合は、値で取得します。
次のようなコンストラクターの場合、それを決定する方法は?
class A
{
public:
A(string str) : mStr(str) {} // here which is better,
// pass by value or const reference?
void setString(string str) { mStr = str; } // how about here?
private:
string mStr;
};