2013-06-12 103 views
2

已知Qt類在傳遞值時使用copy-on-wite。所以直到需要時才複製。當只需要對對象的只讀訪問時,我曾多次看到通過const引用傳遞Qt類。爲什麼人們通過const QString&而不是簡單QString,如果在這兩種情況下都沒有複製完成?通過const引用傳遞Qt類

回答

6

這是因爲魔術帶有價格。 QString不會複製整個字符串,但會計算引用。許多QString的拷貝可能會減慢程序速度。如果const QString&足夠滿足您的需求,爲什麼不使用它?它仍然更快。

3

複製寫入並不意味着該對象不會被複制。這隻意味着深層複製將寫入,即實際數據將在寫入時被複制。製作副本的主要複雜性當然是數據複製。但只是製作淺拷貝涉及一些操作,如引用計數。

結果,通過引用仍然比製作淺拷貝便宜。