1

私は、数多くの数と文字列の計算を含むカスタムクラスを作っています。私はアクセサーとミューテータを用意するだけで、クラスを不変にしました。オブジェクトが構築されると、そのオブジェクトの単一のプロパティが変更されることはありません。C++不変のカスタムクラスが参照渡しまたは値渡し

ここから私の質問は、です。私の機能のすべては値渡しです。あなたが不変のオブジェクトを持っている場合は、もはや必要に応じて参照渡しですか?コピーは常に作成する必要があるため、値渡しはメモリの面で無駄ですか?例えば

class MyInteger 
{ 
    private: 
     const int val; 

    public: 
     MyInteger(const int a) : val(a) { };  
     int getValue() const { return val; } 
     MyInteger add(const MyInteger other) 
     { 
      return MyInteger(val + other.getValue()); 
     } 
} 
+1

constへの参照渡し。私はそれが本当に重要ではないタイプの組み込みのためだと思う。 –

+0

@RawNどういう意味ですか? – Hatefiend

+0

'getValue'は' const'でなければなりません。 –

答えて

1

パスごとの値がコピーを必要とします。あなたのクラスが大きく、コストをコピーしている場合は、そのコピーを避けるために参照渡しにすることができます。

これは不変なので、reference-to-constで渡すことができます。

class MyInteger 
{ 
    private: 
     const int val; 

    public: 
     MyInteger(const int a) : val(a) { };  
     int getValue() const { return val; } 

     MyInteger add(const MyInteger& other) const // Note this is passed by reference to const now 
     //       ~ 
     { 
      return MyInteger(val + other.getValue()); 
     } 
} 
+2

'/ /これは値渡しであることに注意してください.'このコメントを削除する必要があります。 –

+0

私は自分の質問を考えているときにその 'const'を追加するのを忘れました。私は 'const 'が私の質問と関係していることをあまり確信していませんが、'追加 'は' other'変数を変更すべきではないという小さな最適化の他にあります。私はまだ値渡しをいつ使うべきかを本当に把握していません。 – Hatefiend

+0

@Hatefiendはここを見てください:[リンク](http://stackoverflow.com/questions/270408/is-it-better-in-c-to-pass-by-value-or-pass-by-constant-参考) – peval27

関連する問題