zoukankan      html  css  js  c++  java
  • c++ noexcept

    在c++标准11之前,c++在函数声明中有exception功能,用来指定函数抛出的异常类型

    void func1() throw(runtime_error);  // 可能抛出runtime_error的异常

    void func2() throw();  // 不会抛出任何异常

    void func3();  // 可以抛出任何异常

    如果函数抛出了没有在异常说明中列出的异常,则编译器会调用标准库函数unexpected。默认情况下,unexcepted函数会调用terminate函数终止程序。

    由于这种异常声明的功能很少使用,所以在c++11中被弃用,c++11引入noexcept,具体用法如下:

    void func4 noexcept;

    noexcept的功能相当于上面的throw(),表示函数不会抛出异常。如果noexcept修饰的函数抛出了异常,编译器可以选择直接调用std::terminate()来终止程序运行,noexcept比throw()的效率高一些。

    一段代码说明noexcept与throw()的关系:(c++config.h)

    // Macro for noexcept, to support in mixed 03/0x mode.
    #ifndef _GLIBCXX_NOEXCEPT
    # if __cplusplus >= 201103L
    #  define _GLIBCXX_NOEXCEPT noexcept
    #  define _GLIBCXX_USE_NOEXCEPT noexcept
    #  define _GLIBCXX_THROW(_EXC)
    # else
    #  define _GLIBCXX_NOEXCEPT
    #  define _GLIBCXX_USE_NOEXCEPT throw()
    #  define _GLIBCXX_THROW(_EXC) throw(_EXC)
    # endif
    #endif
  • 相关阅读:
    构建之法阅读笔记01
    最长英语单词链
    第十五周学习总结
    寻找“水王”
    Happy Necklace HDU
    Bi-shoe and Phi-shoe LightOJ
    The Embarrassed Cryptographer POJ
    Big Number HDU
    矩阵乘法模板C/C++
    Baby Step,Giant Step算法模板
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13223875.html
Copyright © 2011-2022 走看看