我应该返回一个值还是抛出一个异常…

Should I return a value or throw an exception....?

本文关键字:一个 异常 返回 我应该      更新时间:2023-10-16

我正在编写一个模板T的泛型类。

它有一个成员函数

T findElement (T data1)
{
    Tree<T> *tree=search (data1,TreeTop);
    if (tree==NULL) 
        cout<<"n Element Not FOund n "';
    else
        // Usefult Part Of Code Which Returns A Data Of Type T (Generic)
}

现在如果第一个条件是true,我应该抛出一个异常吗?

它会篡改函数的返回类型吗?关于异常是如何工作的一点解释将会有所帮助。

是否抛出异常是一个主观的问题,这取决于你的情况和编码风格。

一般来说,大多数人会说只在不寻常的情况下抛出异常-所以如果您期望许多搜索搜索没有返回结果,那么返回一个特殊或特殊形式的元素可能是一个好主意,如果这是在正常情况下很少或从不发生的事情,那么大多数开发人员会认为异常是合适的。

关于返回类型:当函数抛出时,没有返回类型,因为函数永远不会返回,相反,程序从调用上下文中catch的第一行继续执行。

有很多选择。选择哪一个完全取决于上下文。

  1. 返回std::optional<T>(或boost::optional<T>)时,没有找到任何可以正常程序流的一部分。
  2. 抛出一个异常,如果没有找到任何指示异常情况引起的程序的环境,这既不是你的代码的错误,也不是坏输入的结果(例如,如果另一个线程已经清空容器在只是错误的时刻或如果元素没有放在那里,由于内存耗尽)。
  3. assert(false);,终止程序。当没有发现任何东西只意味着你自己的代码是错误的时候,这样做,所以快速终止是可能发生的最好的事情。