2012-12-13 27 views
0

复制两个双打可以是明显的,但往往比一对指针的从C++ PROG强加开销复制:加倍VS指针

少 的开销。郎。

有人可以解释它吗?

+0

请添加相关的上下文,那个人在说什么? – Mat

回答

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引用是首选方法,因为它可以避免必须复制整个矩阵。

+0

这很清楚,但为什么复制两个双打的开销可能小于一对指针所施加的开销? – 4pie0