0

C++ でリスト データ型を実装しているとします。あなたのこのリストは、アイテムを単純な配列に保持し、タイプ「動物」のインスタンスを保持します。

たとえば、addItem メソッドは次のようになります。

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

したがって、単純に List 実装に currentPosition があり、それに新しい Animal を追加すると、Animal が「currentPosition」の animalArray で参照され、currentPosition が増加します。

私の質問はretrieveItemについてです。これら2つの違いはありますか:

void MyAnimalList::getTheLastAddedAnimal(Animal &a){
    a = animalArray[currentPosition-1];
}

Animal MyAnimalList::getTheLastAddedAnimal(){
    return animalArray[currentPosition-1];
}

明らかに、2 番目のメソッドは次のように呼び出されます。

Animal lastAddedAnimal = myAnimalList.getTheLastAddedAnimal();

最初のものは次のように呼び出す必要があります。

Animal someAnimal;
myAnimalList.getTheLastAddedAnimal(someAnimal);
4

1 に答える 1

2

違いはセマンティックです。メソッドが呼び出された場合、そのメソッドがそれを返すgetXXXXXことを期待します。

ほとんどの適切なコンパイラは NRVO を実装しているため、ここでは効率は実際には問題になりません。私は 2 番目のバージョンを使用します。

ただし、 の定義をinsertAnimal(Animal a)に変更しinsertAnimal(const Animal& a)ます。

于 2012-11-18T22:14:01.930 に答える