2 つの double をコピーするオーバーヘッドは顕著になる場合がありますが、多くの場合、ポインターのペアが課すものよりも少なくなります。
C++ プログラムから。言語
誰かがそれを説明できますか?
これは、Stroustrup による「The C++ Programming Language」の第 11 章からの抜粋です。
コンテキストで引用を見てみましょう:
complex
type の引数を取る演算子を定義しましたcomplex
。これは、complex
演算子を使用するたびに、各オペランドがコピーされることを意味します。2 つのコピーのオーバーヘッドはdoubles
目立つ場合がありますが、多くの場合、ポインターのペアが課すものよりも小さくなります (ポインターを介したアクセスは比較的高価になる可能性があります)。残念ながら、すべてのクラスが都合のよいように小さい表現を持つわけではありません。過度のコピーを避けるために、関数を宣言して参照引数を取ることができます。例えば:
class Matrix {
double m[4][4];
public:
Matrix();
friend Matrix operator+(const Matrix&, const Matrix&);
friend Matrix operator*(const Matrix&, const Matrix&);
};
彼が言っているのは、complex
は小さいので、参照ではなく値で渡すことが許容されるということだけconst
です。ただし、これは、上記のような大きな型では受け入れられませんMatrix
。const
このようなタイプの場合、マトリックス全体をコピーする必要がなくなるため、参照渡しが推奨される方法です。