C++11新特性(78)-noexcept运算符(noexcept operator)

前一篇文章说明了noexcept说明符,使用了该说明符就相当于对程序员和编译器双方承诺不会抛出异常。程序员看到这个承诺,可以不必编写复杂的异常捕捉代码;编译器看到这个承诺,可以执行某些可能抛出异常时无法进行的优化操作。

异常符说明的实参

前一篇文章没有提到,实际上noexcept说明符是可以接受一个bool类型的参数的。

实参为true则说明该函数不会抛出异常,反之则说明该函数可能抛出异常。这种方式在处理是否抛出异常不一定的情况下很有用,例如以下模板函数:

在fun中,如果T的类型为简单数据(例如int)则赋值语句不会抛出异常;如果T的类型为一个类(例如string),赋值语句就可能抛出异常。代码中使用is_pod来判断数据是否为POD(Plain Old Data type)来决定fun是否为noexcept。示例代码如下:

输出结果如下:

noexcept运算符

C++11还另外提供了noexcept运算符,用于确认一个处理是否会抛出异常。例如下面的代码:

fun2是否会抛出异常,决定于fun是否会抛出异常。代码首先通过noexcept运算符来计算fun(a,b)是否抛出异常,计算结果是一个布尔值,正好作为noexcept说明符的参数。示例代码如下:

输出结果如下:

作者一句话

更加高级的功能适用于更加精细的需求。

示例代码下载地址

https://github.com/xueweiguo/OOThinking/blob/master/20180522%20NoexceptOperator.cpp

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值