复制两个双打的开销可能会很明显,但往往更少 而不是一对指针强加的
来自C ++编程。朗。
有人可以解释一下吗?
答案 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
引用是首选方法,因为它可以避免复制整个矩阵。