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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/craftsman1970/article/details/82858285

前一篇文章说明了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

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

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

猜你喜欢

转载自blog.csdn.net/craftsman1970/article/details/82858285