我碰到一些代碼,用這樣的方法來:常數引用到指針
QList<Item*> itemList;
void addItem(Item* const& item)
{
itemList.append(item);
}
現在,我看不出這之間的任何有意義的區別:
QList<Item*> itemList;
void addItem(Item* item)
{
itemList.append(item);
}
但很明顯有人走出他們的方式來使用這種奇怪的類型。或者一個重構工具可能出錯了。
是否有任何理由保持該函數簽名?某種角色案件的行爲有所不同?我想不出任何事情。
可能只是'QList :: append'簽名的複製粘貼,它需要'const T&',因爲它是通用的,而且它知道,'T'是複製代價昂貴的。編輯:嘿,不是字面上的複製粘貼,因爲你的代碼有'T const',而我剛剛檢查過的QT文檔有'const T&'。但是精神上一個副本,因爲意思是一樣的。 – 2011-03-26 00:11:22
@Steve這不是通過引用傳遞一個對象,而是將一個指針傳遞給一個對象。將不會有昂貴的複製。 我不能想到任何東西,但可能使用常量迭代器? – 2011-03-26 00:15:36
@Khaled:我知道。我並不是說'Item *'拷貝的代價可能很高。我在說,在'QList'中,'T'可能要複製很昂貴。這個程序員有(我懷疑)複製了一些與'Item *'的具體情況無關的代碼。由於通過'const'引用傳遞指針並沒有什麼錯,他們甚至可能會故意保留它,以便它看起來與'QList :: append'一致 - 當然還有不熟悉'QList'的人,這是不協調的因爲你通常不會以這種方式傳遞指針。 – 2011-03-26 00:17:41