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

时间:2014-06-19 12:36:17

标签: c++ function exception-handling return-value

我正在编写一个通用的模板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,我应该抛出异常吗?

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

2 个答案:

答案 0 :(得分:4)

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

一般情况下,大多数人会说只在异常情况下抛出异常 - 所以如果你期望很多搜索搜索没有返回结果那么可能返回一个特殊或特殊形成的元素是一个好主意,如果这是很少或在正常情况下永远不会发生,大多数开发人员都会认为例外是恰当的。

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

答案 1 :(得分:0)

有很多选择。应该选择哪一个完全取决于具体情况。

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