2015-12-14 31 views
1

該項目的一點背景。
類圖書 - >含圖書信息
類BooksDB - >數據庫圖書,其中書可以被添加/刪除/搜索....爲什麼此功能標題不是最佳的

現在我已經得到了下面的函數頭,其打印出的書放在BooksDB書的傳染媒介。

void printBookDetails(const std::vector<Book*>& books) 

此功能臨危的書籍如const引用指針,其拷貝的載體導入同一類型的新載體。根據書籍獨特的ISBN對新的矢量進行排序並打印出來。

我現在被問到爲什麼上面的函數頭在接收參數的方式中不是最優的,它應該如何重寫以及爲什麼選擇這個函數頭。

我會爲一個建議愛,因爲我已經讀到的一切上,這樣,可傳遞對象的功能被發現,因此無法管理想出解決辦法..

+2

那麼,如果你打算在函數中做一個副本,爲什麼不按照價值傳遞呢?它會爲你節省一行代碼。 – NathanOliver

+0

有道理。但是這個函數頭有什麼好處? – Elia

+0

該向量是指針的,所以即使有數千甚至數百萬條目,我強烈懷疑與實際打印(字符串格式化和I/O)相比,向量的複製可以忽略不計。 – bolov

回答

3

printBookDetails如果你要製作一個副本的矢量然後你可以將它改爲

void printBookDetails(std::vector<Book*> books) 

然後讓副本爲你生成。這樣可以避免您在此功能中執行此操作。

另一個好處是,如果將r值傳遞給函數,則應該使用移動語義,即使複製向量也可以節省成本。

+0

然而,爲什麼最好堅持const參考頭? – Elia

+0

@Elia:你告訴我們。從你告訴我們的情況來看,這似乎是錯誤的。如果您只是複製參考文獻而不使用它,沒有理由通過參考傳遞。 –

+0

@Elia如果您不打算複製副本,則首選副本,因爲複製矢量可能很昂貴。如果你總是要複製一份,那麼無論如何傳遞值都是可以的。 – NathanOliver

相關問題