有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在C++中等价于java的非法语言

在Java中,如果方法的输入参数无效,我们可以抛出IllegalArgumentException(类型为RuntimeException)。在C++中,没有检查和未检查异常的概念。在标准C++中是否存在类似的异常,可以用来指示运行时异常?或者标准中没有一个共同的风格,但在这种情况下,每个人都在实践中遵循

或者,我应该创建自己的自定义异常并抛出它吗


共 (5) 个答案

  1. # 1 楼答案

    std::域_错误可能是您正在寻找的,但我怀疑很少有人使用它。大多数人从std::exception派生出自己的异常类型

  2. # 2 楼答案

    不像java,C++没有“标准框架”,只是一个小的(可选的)标准库。另外,C++程序员在使用EM>时是否存在例外情况,有不同的看法。p>

    因此,不同的人会提出不同的建议:一些人喜欢使用标准库中的异常类型,一些库(例如Poco)使用自定义异常层次结构(源自std::exception),而另一些库根本不使用异常(例如Qt)

    如果您想坚持使用标准库,则存在一种特殊的异常类型:invalid_argument(extensionslogic_error

    #include <stdexcept>
    
    // ...
    throw std::invalid_argument("...");
    

    参考:以下是在^{中定义(并记录)的标准异常类型的概述:

    exception
        logic_error
            domain_error
            invalid_argument
            length_error
            out_of_range
        runtime_error
            range_error
            overflow_error
            underflow_error
    
  3. # 3 楼答案

    如果“无效”是指不满足方法的预期值,则可以抛出

    std::logic_error 
    or 
    std::runtime_error.
    

    如果你指的是一些与强制转换相关的东西,比如一个对象不能转换为另一个对象——这也不例外,它也不会被自动抛出

    事实上会的但仅适用于动态演员阵容<>;参考资料。 它会扔

    std::bad_cast
    

    我不确定自己扔这个是不是个好主意

    我更喜欢使用logic_error及其衍生物,以防有人传递了错误的参数,因为这是一个逻辑错误:程序员传递了错误类型的参数

    但我更喜欢在这种情况下使用assert。因为像向函数传递错误的值或类型这样的事情只有在开发过程中才能被接受,在发布时应该避免这样的检查

  4. # 4 楼答案

    你可以抛出一个标准异常,也可以自己滚动。你可能想在抛出的异常中包含额外的信息,这将是你自己做的一个很好的理由

    就我个人而言,我还没有见过这样的域签入系统。它当然不是通用的

  5. # 5 楼答案

    我总是用std::invalid_argument表示非法参数