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

Using References in methods in C++ and Returning Values?

本文关键字:C++ 返回值 引用 方法      更新时间:2023-10-16

>假设您正在C++中实现列表数据类型。您的此列表将项目保存在一个简单的数组中,并将保存类型为"动物"的实例。

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

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

因此,我们只是在List实现中有一个currentPosition,当我们向其添加新的Animal时,Animal a现在在animalArray的"currentPosition"中被引用,然后增加currentPosition。

我的问题将是关于检索项。这两者之间有什么区别吗:

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);

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

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

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