我碰到一些代码,用这样的方法来:常数引用到指针
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