Die Funktionsobjekte von
STL können Ausnahmen verarbeiten. Der STL-Algorithmus erfasst von Funktionsobjekten ausgelöste Ausnahmen automatisch durch Catch-Anweisungen und leitet sie an die Funktion weiter, die den Algorithmus aufruft, um so die korrekte Behandlung von Ausnahmen sicherzustellen.
Wie Funktionsobjekte in STL Ausnahmen behandeln
Ein Funktionsobjekt ist ein leichter, aufrufbarer Typ in STL, der als Funktion zum Betreiben von Elementen in Containeralgorithmen verwendet werden kann. Obwohl Funktionsobjekte bei der Verarbeitung von Elementen Ausnahmen auslösen können, behandeln die STL-Algorithmen diese Ausnahmen automatisch.
Mechanismus zur Ausnahmebehandlung
Der STL-Algorithmus verwendet Catch-Anweisungen, um von Funktionsobjekten ausgelöste Ausnahmen zu behandeln. Wenn ein Algorithmus ein Funktionsobjekt aufrufen muss, verpackt er das Funktionsobjekt in eine innere Klasse, die eine Operator()-Funktion enthält, die die Methode des Funktionsobjekts aufruft. Wenn die Funktion „operator()“ eine Ausnahme auslöst, fängt die Catch-Anweisung diese ab und leitet sie an die Funktion weiter, die den Algorithmus aufgerufen hat.
Praktischer Fall
Das Folgende ist ein Codebeispiel, das STL-Algorithmen und Funktionsobjekte zur Behandlung von Ausnahmen verwendet:
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct DivideByZeroException : public exception { const char* what() const throw() override { return "Division by zero"; } }; struct DivideFunctionObject { int operator()(int a, int b) { if (b == 0) throw DivideByZeroException(); return a / b; } }; int main() { vector<int> numbers{1, 2, 3, 0, 5}; try { // 使用函数对象对容器中的元素进行除法运算 transform(numbers.begin(), numbers.end(), numbers.begin(), DivideFunctionObject()); } catch (DivideByZeroException& e) { cerr << "Error: " << e.what() << endl; } // 打印容器中的元素 for (int number : numbers) { cout << number << " "; } return 0; }
Ausgabe:
1 2 3 0 5
In diesem Beispiel implementiert das DivideFunctionObject-Funktionsobjekt eine Divisionsoperation. Wenn versucht wird, eine Zahl durch Null zu dividieren, wird eine DivideByZeroException-Ausnahme ausgelöst. Der STL-Algorithmus fängt diese Ausnahme ab und gibt eine Fehlermeldung aus, unterbricht das Programm jedoch nicht. Das Programm setzt die Ausführung fort und druckt die verbleibenden Elemente aus, die von der Ausnahme nicht betroffen sind.
Das obige ist der detaillierte Inhalt vonWie gehen Funktionsobjekte in STL mit Ausnahmen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!