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

  • 相关阅读:
    nyoj-707-A Simple Problem
    nyoj-290-动物统计加强版
    nyoj-27-水池数目
    nyoj-92-图像有用区域
    nyoj-82-迷宫寻宝(一)
    nyoj-289-苹果
    nyoj-311-完全背包
    Docker: docker network 容器网络
    Docker: docker container常用命令实战(2)-数据持久化
    Docker: docker container常用命令实战
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9706769.html
Copyright © 2011-2022 走看看