复制两个双精度的开销可能很明显,但通常比一对指针强加的要少
来自 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
引用传递是首选方法,因为它可以避免复制整个矩阵。