0

假设您正在 C++ 中实现一个列表数据类型。你的这个列表会将项目保存在一个简单的数组中,并将保存类型为:“动物”的实例。

例如,addItem 方法将是这样的:

void MyAnimalList::insertAnimal(Animal a){
    animalArray[currentPosition] = a;
    currentPosition++;
 }

因此,我们在 List 实现中只是有一个 currentPosition,当我们向其中添加一个新 Animal 时,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);
4

1 回答 1

2

区别在于语义。如果一个方法被调用getXXXXX,你期望它返回那个东西。

Most decent compilers implement NRVO, so efficiency isn't really an issue here. I'd go with the second version.

I would however change the definition of insertAnimal(Animal a) to insertAnimal(const Animal& a).

于 2012-11-18T22:14:01.930 回答