C++11异常抛出处理。
再C++98中 通过throw()来声明不抛出异常的函数。而在C++11中定义了新的异常处理修饰符 noexcept
基本格式是
void func() noexcept(bool)
bool值为是否抛出异常。
#include <iostream>
using namespace std;
struct A
{
~A()
{
throw 1;
}
};
struct B
{
~B() noexcept(false)
{
throw 1;
}
};
struct C
{
B b;
};
void funA() { A a; }
void funB() { B b; }
void funC() { C c; }
int main()
{
try
{
funA();
}
catch (...)
{
cout << "catch A error" << endl;
}
try
{
funB();
}
catch (...)
{
cout << "catch B error" << endl;
}
try
{
funC();
}
catch (...)
{
cout << "catch C error" << endl;
}
system("pause");
}
这段代码会报出警告在不抛出异常的函数里面抛出异常,虽然我们未申明说~A()不抛出异常,但是他默认就是~A()析构函数不抛出异常,我们在里面throw 1了。这段代码会在throw 1;后断点。