我是一名 Java 开发人员,试图解决一个简单的 C++ 任务。在 Java 中,如果我想返回一个空/空对象,以指示未找到该对象,我只需返回 null。例子:
Person getGetByName(String name) {
for (int i = 0; i < 10; i++) {
if (people[i].name == name) {
return people[i];
}
}
return null;
}
稍后在代码中我可以做Person p = getByName("Sam");
if (p == null) { ...
}
在 C++ 中,我有以下方法似乎如果我声明一个像上面这样的方法,返回 NULL 不是一个选项,因为该方法不返回指针而是返回一个类。
那么我返回什么来表明没有人被发现?
最佳答案
上面的代码还有一个问题——C++ 版本效率低下。在 C++ 中,返回 Person
by-value 总是返回它的一个拷贝(RVO 除外,它在此处不适用)。
与 C++ 不同,Java 没有对象的值语义,在 Java 中返回 Person
始终返回对对象的引用。 Java 中的引用更像是 C++ 中的指针,例如可以是null
.
所以等效的 C++ 代码实际上是:
Person* getGetByName(std::string const& name) {
for(int i = 0 ;i<10 ;i++) {
if(people[i].name == name){
return &people[i];
}
}
return nullptr;
}
现在你可以做Person* p = getGetByName("blah");
if (p == nullptr) {
// not found ...
} else {
// use p->name etc.
}
C++ 没有自动内存管理。 people
的使用生命周期因此,vector 必须比返回的指针更持久。如果情况并非如此,那么使用智能指针来代替(例如 unique_ptr
或 shared_ptr
)会更惯用。考虑对象生命周期是 C++ 开发人员的责任。
关于c++ - 如何在 C++ 中正确返回空/空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67347566/