1.概念
1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化
2)noexcept说明符:若修饰函数(紧跟在参数列表后面),则意为承诺编译器这个函数不抛出任何异常
3)C++11之前使用throw()来指明某个函数不会抛出异常
void fun() throw() //C++11之前使用throw()来指明某个函数不会抛出异常
{
cout << << endl;
} void fun11() noexcept //C++11使用noexcept来指明某个函数不会抛出异常
{
cout << << 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());//若recoup(5)不抛出异常则返回true,抛出异常返回false