在方法中使用引用C++和返回值
Using References in methods in C++ and Returning Values?
>假设您正在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)
。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- C++输出参数与返回值