在C++ Primer中文版第5版237頁關于建構式有下面的代碼:
struct Sales_data{
//新增的建構式
Sales_data() =default;
Sales_data(const std::string &s) :bookNo(s){} //為什么要用參考?
Sales_data(const std::string &s, unsigned n, double p): //為什么第2和第3個引數不用參考?有什么區別?
bookNo(s), units_sold(n),revenue(p*n) {}
...
}
想請問一下第三個建構式 為什么const std::string &s 要使用參考,我試過不加參考也可以,加參考和不加參考有什么區別呢?
uj5u.com熱心網友回復:
& 的目的是參考,避免再復制一個std::stringconst 是為了限定它只讀
const string s 的話還是要再復制一次豈不是很浪費,既然已經是只讀了為啥不直接用參考。
uj5u.com熱心網友回復:
那既然這樣的話,為何不直接寫std::string s 呢?直接復制 也不會改變原有的值, 像第二個和第三個引數一樣。
uj5u.com熱心網友回復:
效率啊,復制一個字串需要更多的記憶體空間,還需要CPU去運算。。
如果你這個字串很大呢?比如有上萬個字符,那么拷貝一下,程式的開銷就很大了
所以在“復雜物件”做為引數的時候,一般都采用“參考”或者“指標”,只需要傳入一個記憶體地址就行了,不需要拷貝
你可以簡單的把“參考”看做是“指標的安全用法”就行了,雖然這么說有點片面,但我覺得比較容易理解。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49136.html
標籤:基礎類
