现代C++编程实践(八)—关于noexcept修饰符和noexcept操作符

本文介绍了C++中的noexcept修饰符和noexcept操作符,阐述它们在异常处理中的作用。noexcept用于指定函数是否抛出异常,操作符用于编译时检查。noexcept可以避免异常扩散,保证程序执行安全,但可能导致资源未释放。此外,还讨论了C++中异常处理与Java的对比,并提供了相关示例。
摘要由CSDN通过智能技术生成

noexcept修饰符和noexcept操作符可以说是两个概念,C++标准委员会给noexcept的这两种用法的定义如下:

noexcept修饰符:指定函数是否抛出异常。

noexcept操作符:运算符进行编译时检查,最终返回一个布尔值,根据布尔值决定是否抛出异常。

https://zh.cppreference.com/

在实际编程时通常用来排除逻辑上存在的不合理的场景。其实同样的功能在C98中就已经通过断言进行实现,断言是通过assert关键字实现,如果assert后面的表达式返回值为真程序就会终止执行。同样在C++中,也有一套单独的异常处理方式,通过throw关键字实现可以实现比C更加强大的异常处理功能。

大家可以看下现在公司的代码,是否存在下面这种异常抛出的写法:

void func() throw (int, double);

上面这段代码就表示函数func可能抛出的异常类型为整型或者浮点型。现在很多java代码还是这种写法。实际上,在C++中,这种写法是很少见的。也正因为此在C++11中,该写法被正式弃用。同时throw()也被noexcept替代,不过从C++17开始,标准委员会对throw()进行了重新定义,使其在功能上和noexcept等价。由此可见,在C++发展过程中,对于一些语法、特性的废弃或者不推荐只是暂时的,在未来的版本中仍然可能被重新使用。

1 noexcept修饰符

noexcept跟在函数名后面表示函数不会抛出异常,通常的写法为:

void f() noexcept;

这种写sh法默认noexcept表达式返回true。不抛出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值