复制开销:双精度与指针

overhead of copying: doubles vs pointers

本文关键字:指针 双精度 开销 复制      更新时间:2023-10-16

复制两个双精度的开销可能很明显,但通常更少 比一对指针强加的

从C++郎

有人可以解释一下吗?

这是Stroustrup的"C++编程语言"的第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引用传递是首选方法,因为它将避免复制整个矩阵。