exit()调用一个应该返回引用的函数

Dar*_*ioP 2 c++ return reference exit

在库中,我有一个函数,它在数据库中搜索一个键并返回一个对象的非const引用.我想处理找不到密钥的情况,这通常是由调用函数时的错误引起的.这种情况非常糟糕,程序无法继续,所以我打印一条消息,以帮助发现错误和调用exit(1).问题在于return语句在这种情况下永远不会执行,但无论如何都必须在那里.如果它是一个指针,我可以只return nullptr;用一个参考?我应该做这样的伪代码吗?

 Type & get(const Key & k) {
     if (my_db.key_exists(k)) {
       return my_db.at(k);
     }
     std::cerr << k << " not found\n";
     exit(1); 
     return *(new Type(some_dummy_parameters));
 }
Run Code Online (Sandbox Code Playgroud)

它看起来很糟糕!也许我应该避免这样的功能.拜托,让我知道你的意见!

Pau*_*zie 9

这种情况太糟糕了,程序无法继续,所以我打印一条消息来帮助发现错误并调用exit(1)

不可以.如果此代码是库的一部分,那么库不应该是决定应用程序是否应该退出的库.

如果文件是打开的并且需要关闭,或者需要清理某些其他资源,或者数据库类的用户想要记录错误并继续执行其他操作,该怎么办?

答案不过是你现在正在做的事情.抛出异常,返回错误代码等,但不要在库或类代码中关闭应用程序.

信不信由你,有一个商业数据库库完全正在做你正在做的事情(关闭应用程序).他们从图书馆的用户那里得到了很多愤怒的回应,他们为什么要意外关闭应用程序.而且你知道什么 - 给客户的答案是"我们觉得错误严重到足以阻止应用程序,因为我们的库无法继续正常工作".这不仅是糟糕的推理,还是傲慢,客户让他们知道.