zoukankan      html  css  js  c++  java
  • noexcept(c++11)

    1.概念

    1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化

    2)noexcept说明符:若修饰函数(紧跟在参数列表后面),则意为承诺编译器这个函数不抛出任何异常

    3)C++11之前使用throw()来指明某个函数不会抛出异常

    void fun() throw()   //C++11之前使用throw()来指明某个函数不会抛出异常
    {
        cout << 666 << endl;
    }
    
    void fun11() noexcept  //C++11使用noexcept来指明某个函数不会抛出异常
    {
        cout << 777 << endl;
    }

    4)编译器看到这个承诺,就不会创建额外的异常处理代码,程序得到优化

    5)noexcept说明符接受一个可选的实参,该实参为bool型。若为true,则承诺这个函数不会抛出异常;若为false,则承诺这个函数可能抛出异常

    void recoup(int) noexcept(true);
    void recoup(int) noexcept(false);

    6)以下情形鼓励使用noexcept:

    • 移动构造函数(move constructor)
    • 析构函数(destructor):在新版本的编译器中,析构函数是默认加上关键字noexcept的
    • 在不是以上情况或者没把握的情况下,不要轻易使用noexcept

    7)noexcept运算符:用于判断给定的的表达式是否会抛出异常,返回一个bool型右值常量表达式,调用形式为:noexcept(表达式)

    noexcept(recoup(5));//若recoup(5)不抛出异常则返回true,抛出异常返回false

    参考资料:

    https://www.cnblogs.com/sword03/p/10020344.html

  • 相关阅读:
    JavaEE XML SAX解析
    JavaEE XML DOM解析之DOM4J
    JavaEE XML DOM解析
    JavaEE XML StAX创建
    移动端弹窗后禁止滚动
    vue cli3 项目优化
    【性能优化】quicklink:实现原理与给前端的启发
    关于js异步的一些知识点
    node
    class类
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9706769.html
Copyright © 2011-2022 走看看