在爪哇如果输入参数的方法是无效的,我们可以抛出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及其衍生物的情况下,有人传递错误的参数,因为它是一个逻辑错误:程序员通过错误类型的参数。

但更所有我喜欢在这种情况下使用的断言。因为像传递错误的值或类型的功能,这样的事情是可以接受只在开发和此类检查应在发布来避免。

您可以抛出一个标准的异常或滚你自己。你可能想在你抛出异常的附加信息,这将是一个很好的理由做你自己的。

就个人而言,我还没有看到这样的领域在我工作的系统检查。这当然是不普遍的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top