C++关键字noexcept
关键字noexcept
一.解释
c++11新特性,函数加上改关键字,告诉编译器,函数不会发生异常,有利于编译器对程序的优化;
可以做为函数声明符的一部分出现(实现有noexcept
,声明不带noexcept
会报错);
typedef
不可用;
void f ( ) noexcept; // 函数 f() 不会抛出
void ( * fp ) ( ) noexcept ( false ); // fp 指向一个可能抛出
void g ( void pfa ( ) noexcept ) 的函数; // g 接受一个指向不抛出的函数的指针
// typedef int (*pf)() noexcept; // 错误
c++中可能抛出异常的函数:
- 使用非空动态异常规范声明的函数(直到 C++17,
throw()
); - 不带
noexcept
说明符声明的函数,除了析构,构造,同类赋值,比较运算符重载,分配函数;
带noexcept
的函数重载时也不必须带相同的异常规范;
二.noexcept使用
void func() noexcept; //该函数不会发生异常
void func() noexcept(false); //可能发生异常——一般可以不写
//配合模板使用
template <class T>
//由T()表达式是否会抛出异常决定fun()是否会抛出异常
void fun() noexcept(noexcept(T()))
{
...
}
三.推荐使用情况
-
移动构造函数
-
移动分配函数
-
析构函数
c++11后,默认析构带
noexcept
关键字;如果析构,加
noexcept(false)
则可以抛出异常; -
叶子函数
Life is too short for so much sorrow.
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0 许可协议。转载请注明来自 小紫苏!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)