在C++中等价于java的非法语言
在Java中,如果方法的输入参数无效,我们可以抛出IllegalArgumentException
(类型为RuntimeException
)。在C++中,没有检查和未检查异常的概念。在标准C++中是否存在类似的异常,可以用来指示运行时异常?或者标准中没有一个共同的风格,但在这种情况下,每个人都在实践中遵循
或者,我应该创建自己的自定义异常并抛出它吗
你可以在下面搜索框中键入要查询的问题!
在Java中,如果方法的输入参数无效,我们可以抛出IllegalArgumentException
(类型为RuntimeException
)。在C++中,没有检查和未检查异常的概念。在标准C++中是否存在类似的异常,可以用来指示运行时异常?或者标准中没有一个共同的风格,但在这种情况下,每个人都在实践中遵循
或者,我应该创建自己的自定义异常并抛出它吗
# 1 楼答案
std::域_错误可能是您正在寻找的,但我怀疑很少有人使用它。大多数人从std::exception派生出自己的异常类型
# 2 楼答案
不像java,C++没有“标准框架”,只是一个小的(可选的)标准库。另外,C++程序员在使用EM>时是否存在例外情况,有不同的看法。p>
因此,不同的人会提出不同的建议:一些人喜欢使用标准库中的异常类型,一些库(例如Poco)使用自定义异常层次结构(源自std::exception),而另一些库根本不使用异常(例如Qt)
如果您想坚持使用标准库,则存在一种特殊的异常类型:
invalid_argument
(extensionslogic_error
)参考:以下是在^{中定义(并记录)的标准异常类型的概述:
# 3 楼答案
如果“无效”是指不满足方法的预期值,则可以抛出
如果你指的是一些与强制转换相关的东西,比如一个对象不能转换为另一个对象——这也不例外,它也不会被自动抛出
事实上会的但仅适用于动态演员阵容<>;参考资料。 它会扔
我不确定自己扔这个是不是个好主意
我更喜欢使用logic_error及其衍生物,以防有人传递了错误的参数,因为这是一个逻辑错误:程序员传递了错误类型的参数
但我更喜欢在这种情况下使用assert。因为像向函数传递错误的值或类型这样的事情只有在开发过程中才能被接受,在发布时应该避免这样的检查
# 4 楼答案
你可以抛出一个标准异常,也可以自己滚动。你可能想在抛出的异常中包含额外的信息,这将是你自己做的一个很好的理由
就我个人而言,我还没有见过这样的域签入系统。它当然不是通用的
# 5 楼答案
我总是用
std::invalid_argument
表示非法参数