用C的Java抛出IllegalArgumentException的等效++
-
22-08-2019 - |
题
在爪哇如果输入参数的方法是无效的,我们可以抛出IllegalArgumentException
(这是类型RuntimeException
的)。在C ++中,没有检查和unchecked异常的概念。是否有可用于指示运行时异常标准C ++类似的异常?或者是有一个共同的风格不标准的,但在实践中每个人都遵循这样的吗?
或者,我应该只是创建自己的自定义异常,并把它?
解决方案
与Java,C ++不具有“标准框架”,但只有一个小的(和任选的)标准库。此外,存在在C ++程序员不同的意见是使用异常在所有的
因此,你会被不同的人找到不同的建议:有些人喜欢使用异常类型从标准库,一些库(如波科)使用自定义的异常层次结构(从标准::异常派生),和别人不使用在所有的异常(例如,QT)。
如果你要坚持标准库,存在一个专门的异常类型:invalid_argument
(扩展logic_error
)
#include <stdexcept>
// ...
throw std::invalid_argument("...");
有关的参考:这是在stdexcept
定义(和记录)标准的异常类型的概述:
exception
logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error
其他提示
的std ::定义域可能是你正在寻找的东西,但我怀疑很少有人使用它。大多数人的std ::异常派生自己的异常类型。
我总是使用std::invalid_argument
非法参数。
如果通过你的意思为无效,不满意方法的预期值就可以抛出
std::logic_error
or
std::runtime_error.
如果你的意思是像投下一个对象不能转换到其他相关的东西 - 没有例外的为,它不会自动抛出。
<强>实际上它会。强>但是,只有dynamic_cast的<>上的引用。 它会抛出
std::bad_cast
我不知道它是抛出这个由你自己是个好主意。
我更喜欢使用logic_error及其衍生物的情况下,有人传递错误的参数,因为它是一个逻辑错误:程序员通过错误类型的参数。
但更所有我喜欢在这种情况下使用的断言。因为像传递错误的值或类型的功能,这样的事情是可以接受只在开发和此类检查应在发布来避免。
您可以抛出一个标准的异常或滚你自己。你可能想在你抛出异常的附加信息,这将是一个很好的理由做你自己的。
就个人而言,我还没有看到这样的领域在我工作的系统检查。这当然是不普遍的。