Niezrozumiała kolejność wypisywania znaków – prośba o wytłumaczenie

0

Witam, jest tu ktoś kto wytłumaczyłby działanie tego programu? Wynikiem jest wypisanie 33338CCCC2B. Nie rozumiem dlaczego w takiej kolejności wypisane są znaki więc jeśli ktoś mógłby krok po kroku wytłumaczyć mi działanie tego kodu byłbym bardzo wdzięczny.

#include <iostream>

using namespace std;

struct E{
    E(){cout<<'8';}
    char what()const{return '2';}
    ~E(){ cout<<'B';}
};

struct B{
    B(char c) : c_(c) {cout << '3';}
    ~B(){cout << c_;}
private:
    char c_;
};

struct C:B{
    C( char c ): B(c){}
};

void f(int i){
 C c('C');
 if( i>0)
    f(i-2);
 else
    throw E();
 C cc('4');
}
int main(){
  try {

  f(5);
  }
    catch (const exception&e){cout<<'Y';}
    catch (const E&e){cout<<e.what();}
    catch(...){cout<<'6';}
}
1

Możesz sobie wypisać coś dodatkowego w destruktorze B, to powinno znacznie uprościć zrozumienie tego co się dzieje. W skrócie wołasz f 4 razy, B jest odkładany na stosie i w momencie rzucenia wyjątku E stos jest odwijany i utworzone instancje są niszczone.

1 użytkowników online, w tym zalogowanych: 0, gości: 1