c++自己编写的查找函数如果查找不到应该返回什么?

发布于 2022-09-02 10:57:24 字数 94 浏览 12 评论 0

比如自己写了一个User类,有一个函数是查找User并返回查找到的User类,但如果这个函数查找不到应该怎么处理,java可以返回null,但是cpp不能进行这样的类型转换。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

在风中等你 2022-09-09 10:57:24
  1. 如果函数返回值是指针,则可以返回nullptr

  2. 如果函数返回值是引用,则可以在查找函数内生成一个static对象,然后凡是查找不到就返回这个对象的引用。

    class User;
    class UserList;
    User &find(UserList &ul) {
      static const User user;
      // ...
    
      return user;
    }
    
  3. 通常,对于这种情况不会采用上述两种办法,因为往往在设计UserList类的时候会设计相应的迭代器(iterator),这样函数的返回值就是迭代器。而迭代器是存在指向 one-past-last 元素的,即查找不到的情况。例如对于vector类:

    vector<int> vi;
    vi.end();  // one-past-last iterator

    而相应的查找函数为:

    vector<int>::iterator find(vector<int> &vi);
    
    auto it = find(vi);
    if (it != vi.end()) {
      /* ... */
    } 
云柯 2022-09-09 10:57:24

我也提两个方法

1、抛异常

User& find( ... ) 
{
    ...
    if (not found) {
        UserNotFoundException().throw();    //在函数调用外部try.catch,跟java类似
    }
}

2、多返回值

可以使用make_tuple,make_pair之类的函数创建返回值

std::pair<User, bool> find( ... ) 
{
    ...
    if (found) {
        return make_pair(..., true);    //在外部检查返回值 !不过只能返回拷贝!
    }
}

其实迭代器和指针是一个好的解决方案,异常也是一个不错的解决方案,可以和返回值一样很从容的判断结果,不过c++写代码很少设计到异常。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文