在C ++和返回值的方法中使用引用?

时间:2012-11-18 22:11:58

标签: c++ reference return-value

想象一下,您正在使用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);

1 个答案:

答案 0 :(得分:2)

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

大多数体面的编译器都实现了NRVO,因此这里的效率并不是真正的问题。我会选择第二个版本。

但我会将insertAnimal(Animal a)的定义更改为insertAnimal(const Animal& a)