今天看到一段代碼,函數的形參類型是 const A &(A是定義的一個類)函數
一開始以爲沒啥,但想一想又不對勁.net
const就是常量嘛,不想讓這個參數被修改,引用就是起別名,修改形參的值,實參也會改變(其實就是修改同一個變量),那聲明成引用變量的意義是什麼設計
一波百度以後blog
&是爲了引用傳遞,防止值傳遞的複製數據get
const是爲了保護數據不被改動變量
const&防止傳值時拷貝構造函數的調用開銷百度
簡單來講就是,在不加const 和 & 的狀況下,進行普通的函數調用,必然會有值傳遞,若是數據量大花費時間長(且有些類型在設計上拒絕複製)構造函數
引用的話只是起別名,仍是這個變量,就不用進行值傳遞,但這個就能夠改變值,因此再加上const修飾引用
結論數據
若是不需改變形參的值又不用做參數傳遞(實參賦值給形參),用常引用做形參適應面最廣:實參能夠是變量也能夠是常量。
若是須要改變形參的值,用引用做形參最合適:實參必須是變量不容許是常量。
若是不需改變形參的值又能夠用做參數傳遞(實參賦值給形參),用普通變量做形參:多了傳遞參數的開銷。
參考資料: