首页 > 解决方案 > 为什么这个程序对 throw 不做任何事情?

问题描述

在此处输入图像描述

我正在在线阅读一些函数的代码,它有这个抛出句。

我实现了相同的函数,但是当我调用它以确保它抛出(通过使 x 为负数)时,我的代码不起作用,因为我没有“处理异常”。

但是图片中的代码也没有,所以这里发生了什么?

基本上我正在寻找的是当有人向函数输入错误参数时调用的函数,然后该函数只是停止程序并说“不,你做错了”。我怎么做?

我在网上阅读了一些关于投掷、接球和尝试的内容,但实际上,我不想那样做。我只想做一件事,一旦它感觉到有问题就停止程序。

标签: c++

解决方案


如果您想生成一些消息(例如在控制台输出中),您可以简单地修改第一个条件:删除 throw,将输出添加到 std::cout 并返回一些值(例如 0)。即替换

if (x < 0.0 || a <= 0.0) throw("bad args in gammq");

经过

if (x < 0.0 || a <= 0.0)
{
   std::cout << "bad args in gammq";
   return 0.;
}

但这意味着您需要检查函数的结果是否有可能使用它,因为 0 现在表示错误。否则,您可以将计算加入 try 块并捕获该块的异常。并且为案例生成 std​​::invalid_argument 异常更准确。所以条件:

if (x < 0.0 || a <= 0.0) throw("bad args in gammq");

最好修改为

if (x < 0.0 || a <= 0.0) throw std::invalid_argument("bad args in gammq");

请记住

#include <stdexcept>

它定义了 std::invalid_argument。用法是:

try
{
   Doub a,x;
   // some computations and initialization of a and x
   Doub val = gammq(a,x);
   // some other computations
}
catch(std::invalid_argument& e)
{
   std::cout << e.what();
}

一旦 gammq 收到错误的参数,try 块内的计算将被终止,catch 块将在控制台输出中生成消息。


推荐阅读