0

2 つの double をコピーするオーバーヘッドは顕著になる場合がありますが、多くの場合、ポインターのペアが課すものよりも少なくなります。

C++ プログラムから。言語

誰かがそれを説明できますか?

4

1 に答える 1

2

これは、Stroustrup による「The C++ Programming Language」の第 11 章からの抜粋です。

コンテキストで引用を見てみましょう:

complextype の引数を取る演算子を定義しました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です。ただし、これは、上記のような大きな型では受け入れられませんMatrixconstこのようなタイプの場合、マトリックス全体をコピーする必要がなくなるため、参照渡しが推奨される方法です。

于 2012-12-15T15:23:09.173 に答える