Мы считаем, что может произойти исключение при инициализации. Поэтому мы пишем блок try/catch.
int f(){
throw 1;
}
class A
{
public:
A() try : _k(f())
{}
catch (int)
{
std::cout << "Exception 1" << std::endl;
}
private:
int _k;
};
Но перехват исключает на одном уровне глубже. Это означает, что следующий код
try
{
A a;
} catch(int)
{
std::cout << "Exception 2" << std::endl;
}
выведет:
Exception 1
Exception 2
Почему этот блок try/catch ведет себя не так, как обычный блок try/catch?
Полный пример кода: http://ideone.com/XjY2d