想象一下,您正在使用C ++实现列表数据类型。这个你的List将把项保存在一个简单的数组中,并保存类型为“Animal”的实例。
例如,addItem方法将是这样的:
void MyAnimalList::insertAnimal(Animal a){
animalArray[currentPosition] = a;
currentPosition++;
}
所以我们在List实现中只有一个currentPosition,当我们向它添加一个新的Animal时,现在动物a在“currentPosition”中的animalArray中被引用,然后currentPosition被增加。
我的问题是关于retrieveItem。这两个之间有什么区别:
void MyAnimalList::getTheLastAddedAnimal(Animal &a){
a = animalArray[currentPosition-1];
}
Animal MyAnimalList::getTheLastAddedAnimal(){
return animalArray[currentPosition-1];
}
显然,第二种方法将被称为:
Animal lastAddedAnimal = myAnimalList.getTheLastAddedAnimal();
并且第一个应该被称为:
Animal someAnimal;
myAnimalList.getTheLastAddedAnimal(someAnimal);
答案 0 :(得分:2)
区别在于语义。如果某个方法被调用getXXXXX
,您希望它返回那个东西。
大多数体面的编译器都实现了NRVO,因此这里的效率并不是真正的问题。我会选择第二个版本。
但我会将insertAnimal(Animal a)
的定义更改为insertAnimal(const Animal& a)
。