2012-12-13 69 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