复制的开销:双打与指针

时间:2012-12-13 19:44:54

标签: c++ pointers double copying

  复制两个双打的开销可能会很明显,但往往更少   而不是一对指针强加的

来自C ++编程。朗。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

这取自Stroustrup的“The C ++ Programming Language”第11章。

让我们看看上下文中的引用:

  

我们定义了complex运算符来获取类型为complex的参数。这意味着对于complex运算符的每次使用,都会复制每个操作数。复制两个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引用是首选方法,因为它可以避免复制整个矩阵。