Modernes C++ programmieren

Okt 23, 2024

lst-0997-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/1aj16d7Ga 
#include <iostream>
#include <thread>
#include <vector>
#include <exception>
using std::cout; using std::endl;

long fib(long n) { return n<=1 ? n : fib(n-1)+fib(n-2); }
void aufgabe1() { auto r = fib(40); cout << "fib(40)=" << r << endl; }

void hauptprogramm() {
    std::thread th{ &aufgabe1 };
    try {
        std::vector data{ 0,1,2 };
        data.at(666);                 //             (ERR)  löst out_of_range aus
    } catch(std::runtime_error &ex) { // passt nicht auf out_of_range
         /* ... */                        // speziellen Fehler hier behandeln
    } catch( ... ) {
        th.join();
        throw;                        // Fehlerbehandlung außen fortsetzen
    }
    th.join();                        // wartet nach Okay oder speziellem Fehler
}

int main() {
    try {
        hauptprogramm();
    } catch( ... ) {
        std::cout << "Ein Fehler ist aufgetreten\n";
    }
}