Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehen Funktionsobjekte in STL mit Ausnahmen um?

Wie gehen Funktionsobjekte in STL mit Ausnahmen um?

王林
王林Original
2024-04-26 08:09:02865Durchsuche

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.

STL 中的函数对象如何处理异常?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn