检查成员函数是否返回临时对象或数组对象

Check if memberfunction returns temporary object or array object

本文关键字:数组 对象 临时对象 返回 成员 函数 是否 检查      更新时间:2023-10-16

我有一个类对象数组,想检查我尝试添加的对象是否已经存在于数组中。比较是通过唯一 IDString 完成的。如果比较为真,我想返回匹配的对象,如果不是,我想返回类的新实例。

Classobject stock::checkIfItemExists(Classobject object) {
for(int i = 0; i < stock.getSize(); i++) {
if(compareUniqueIDs(object, stock[i]) {
return stock[i]; 
}
}
return Classobject{} // no similar item found, return new Classobject
}

调用函数是否有可能区分数组元素的返回值(stock[i])和新创建的类对象的返回值(Classobject{})?

除非您将某种信息注入Classobject{}实例中,否则调用方将无法区分。

一种老式但仍然有效的处理方法是将返回类型更改为

std::pair<bool, Classobject>

并返回true作为对中的第一项,例如,如果创建了对象。从 C++17 开始,更现代的方法是将返回类型更改为

std::optional<Classobject>

参考: http://en.cppreference.com/w/cpp/utility/optional