Uważamy, że może wystąpić wyjątek podczas inicjowania. Więc piszemy blok try/catch.Jak działa polecenie try/catch na liście inicjowania?
int f(){
throw 1;
}
class A
{
public:
A() try : _k(f())
{}
catch (int)
{
std::cout << "Exception 1" << std::endl;
}
private:
int _k;
};
Ale połów rzuca wyjątek na jednym poziomie głębiej. Ów oznacza, że następny kod
try
{
A a;
} catch(int)
{
std::cout << "Exception 2" << std::endl;
}
wyjście wola:
Exception 1
Exception 2
Dlaczego ten blok try/catch nie zachowuje się w ten sam sposób jak zwykły blok try/catch?
Pełna przykładowy kod: http://ideone.com/XjY2d
Na marginesie: automatycznie wraca tylko wtedy, gdy nie rzucasz się, aby opuścić blok "catch". –