美文网首页
深入理解C++11 2.6 noexcept

深入理解C++11 2.6 noexcept

作者: zinclee123 | 来源:发表于2019-08-08 19:04 被阅读0次

    例子:

    using namespace std;
    
    void throwException(){ throw 1;}
    void noBlockThrow(){ throwException();}
    void blockThrow() noexcept {throwException();}
    
    int main(){
        try {
            throwException();
        }catch(...) {
            cout << "Found throw." << endl;
        }
        
        try {
            noBlockThrow();
        }catch(...) {
            cout << "Throw is not blocked." << endl;
        }
        
        try {
            blockThrow();
        }catch(...) {
            cout << "Found throw 1." << endl;
        }
    }
    

    通过xcode,运行结果如下:

    Found throw.
    Throw is not blocked.
    libc++abi.dylib: terminating with uncaught exception of type int
    

    调用blockThrow抛出异常会导致程序退出。当函数声明了noexcept但抛出异常的话,会调用std::terminate中断程序的执行,从而阻止异常的传播。
    noexcept的另一种用法是形如

    void except_func() noexcept(常量表达式);
    

    常量表达式结果为true表示函数不会抛出异常,反之可能抛异常。
    C++11中,析构函数和delete函数默认为noexcept,但是如果代码显示地为析构函数指定了noexcept,或者类的基类或成员有noexceot(false)的析构函数,析构函数就不会再保持默认值

    相关文章

      网友评论

          本文标题:深入理解C++11 2.6 noexcept

          本文链接:https://www.haomeiwen.com/subject/iajfjctx.html