Мне недавно задали этот вопрос в интервью. Ниже кода спрашивалось поведение фрагмента. Я упоминал, что код будет
выбросить исключение, которое будет поймано, но оно не окажется правильным.
Я попытался отладить этот фрагмент кода и у меня есть два вопроса.
1.
Если выполнение действительно входит в строку, попробуйте {A a; } тогда почему catch не может перехватить исключение?
2.
Каково поведение этого фрагмента кода, который не принадлежит ни одному методу внутри структуры? Если я поставлю сиротский код
чтобы быть включенным в метод конструктора B, т. е. внутри B () {}, исключение будет перехвачено правильно. так как же исполнение
Обработка потока это? Я имею в виду, к какому стеку методов / функций относится попытка отлова кода-сироты в B?
#include<iostream>
#include<string>
using namespace std;
struct A
{
A()
{
throw 2;
}
};
struct B
{
B()
// start of orphan code.
try
{
A a;
}
catch(int i)
{
cout << i << endl;
}
// end of orphan code.
};
int main(int argc, char* argv[])
{
B b;
cout << "3" << endl;
return(0);
}