【问题标题】:Exception or Error Messages [duplicate]异常或错误消息 [重复]
【发布时间】:2014-06-27 23:40:47
【问题描述】:

我在设计一个返回双精度值的函数时遇到了难题。

函数正在执行一些计算,设计如下:

double SimpsonIntegration(const Function& f, float a, float b,int n,std::string& ErrorMessages)
if(n%2!=0)
{
    ErrorMessages=ErrorMessages+"Simpson Integration: Number of subintervals must be even number\n";
}else if(n<20||n>100)
{
    ErrorMessages=ErrorMessages+"Simpson Integration: Number of subintervals should be between 20 to 100\n");
}

double h=0,x=0,y=0,retVal=0;

我的困境是如果有错误我不想继续加倍 h=0 .... 行并希望尽快从函数返回。然而,由于它被设计为返回双精度,我不能简单地使用返回表达式。我考虑过使用 goto 语句来结束函数或抛出错误,而不是使用错误消息字符串。但是如果我抛出错误并忘记捕获它,它只会终止程序,不幸的是 C++ 没有提醒程序员函数抛出错误并且必须被调用者捕获的机制。

您会推荐哪种类型的设计来处理错误?提前谢谢你。

【问题讨论】:

  • 您和您的团队必须就政策达成一致并坚持下去。两种方式各有利弊。
  • 这正是例外的用途。
  • 你可以抛出一个异常,或者如果异常对你不可用,像boost::optional这样的东西可能会做你想做的事。
  • 程序员为什么需要提醒?当然,如果她的程序终止,她会发现有问题....

标签: c++


【解决方案1】:

如果错误不能被忽略 - 使用 throw-catch。

如果可以忽略错误(但似乎不是您的情况),您有两种选择:

  1. 对错误代码使用单独的传递引用参数
  2. 返回错误代码(或success的代码)并使用传递引用参数返回实际结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多