c++ - 如何在 C++ 中正确返回空/空对象?

标签 c++

我是一名 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_ptrshared_ptr )会更惯用。考虑对象生命周期是 C++ 开发人员的责任。

关于c++ - 如何在 C++ 中正确返回空/空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67347566/

相关文章:

c++ - 如何将 C++ 中的 char 指针内的数据分配给 JSONCPP

c++ - 是否可以使用 operator new 和 initialiser 语法初始化非 POD 数组?

c++ - 使用快捷方式创建 QAction,无需插入菜单

c++ - 在独立类中重新排序公共(public)非虚拟方法是否会破坏 ABI?

c++ - jsoncpp 只写一个元素的json数组

C++派生类

c++ - 递归函数中的cin

c++ - volatile 成员不能被成员函数访问

c++ - Linux/C++ 将字符串复制到剪贴板

c++ - 如何在模板化项成员上显式调用析构函数