我正在编写一个通用的模板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
,我应该抛出异常吗?
是否会篡改我的函数返回类型。 关于异常如何工作的一点解释将是有帮助的。
答案 0 :(得分:4)
是否抛出异常是一个主观问题,取决于您的情况和编码风格。
一般情况下,大多数人会说只在异常情况下抛出异常 - 所以如果你期望很多搜索搜索没有返回结果那么可能返回一个特殊或特殊形成的元素是一个好主意,如果这是很少或在正常情况下永远不会发生,大多数开发人员都会认为例外是恰当的。
关于返回类型:当函数抛出时没有返回类型,因为函数永远不会返回,而是程序在调用上下文中的catch的第一行继续。
答案 1 :(得分:0)
有很多选择。应该选择哪一个完全取决于具体情况。
std::optional<T>
(或boost::optional<T>
)可以成为正常计划流程的一部分。assert(false);
,终止该计划。如果没有找到任何东西,这样做只会意味着你自己的代码是错误的,所以快速终止是可能发生的最好的事情。