C++异常定义

Bob*_*r02 0 c++ exception-handling exception

任何人都可以向我解释C++中标准异常的定义:

virtual const char* what() const throw();
Run Code Online (Sandbox Code Playgroud)

const throw()最后意味着什么?

Oli*_*rth 9

这是两个独立的,无关的东西.

const该成员函数将不修改任何(非手段mutable)成员变量; 这反过来意味着可以在const对象上调用它.例如:

class Foo {
public:
    void a() const {
        x = 5;  // Compiler error!
    }

    void b() {
        x = 5;  // This is fine
    }

private:
    int x;
};

int main() {
    Foo       p;
    const Foo q;

    p.a();   // This is fine
    p.b();   // This is fine
    q.a();   // This is fine
    q.b();   // Compiler error!
}
Run Code Online (Sandbox Code Playgroud)

throw()是一个异常说明符.它声明此函数不会抛出异常.请参阅例如我应该在C++中使用异常说明符吗?讨论.


nij*_*sen 6

所述const,该函数不会改变它被嵌入在类的任何成员的手段,throw()是异常规范; 该函数承诺不会抛出异常.

请注意,由于C++ 11,throw不推荐使用异常规范,原因如下:异常列表太难以维护throw(...)而非表达式,因此这throw()基本上是唯一使用的规范,并且这些规范在运行时动态检查,产生大量开销,从而减慢您的应用程序.

现在,你可以放心地替换throw()noexcept(true),或者只是noexcept.不会检查这样的方法是否实际抛出异常 - 这是对编译器的保证,反之亦然.如果抛出异常,std::terminate则调用.