C++- Ausnahmen


C++-Ausnahmen

Beim Ausführen von C++-Code können verschiedene Fehler auftreten: Codierungsfehler des Programmierers, Fehler durch falsche Eingaben oder andere unvorhersehbare Dinge.

Wenn ein Fehler auftritt, stoppt C++ normalerweise und generiert eine Fehlermeldung. Der Fachausdruck dafür lautet: C++ wird eine Ausnahme werfen (throw an error).


C++ versuchen und fangen

Die Ausnahmebehandlung in C++ besteht aus drei Schlüsselwörtern: try, throwund catch:

Mit der tryAnweisung können Sie einen Codeblock definieren, der während der Ausführung auf Fehler getestet werden soll.

Das throwSchlüsselwort löst eine Ausnahme aus, wenn ein Problem erkannt wird, wodurch wir einen benutzerdefinierten Fehler erstellen können.

Mit der catchAnweisung können Sie einen Codeblock definieren, der ausgeführt wird, wenn im try-Block ein Fehler auftritt.

Die Schlüsselwörter tryund catchkommen paarweise vor:

Beispiel

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

Betrachten Sie das folgende Beispiel:

Beispiel

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Beispiel erklärt

Wir verwenden den tryBlock, um Code zu testen: Wenn die ageVariable kleiner als ist 18, lösen wir throweine Ausnahme aus und behandeln sie in unserem catchBlock.

Im catchBlock fangen wir den Fehler ab und tun etwas dagegen. Die catch Anweisung nimmt einen Parameter entgegen : In unserem Beispiel verwenden wir eine intVariable ( myNum) (weil wir eine Ausnahme vom intTyp im tryBlock ( age) auslösen), um den Wert von auszugeben age.

Wenn kein Fehler auftritt (z. B. wenn statt , agealso größer als 18 ist), wird der Block übersprungen:2015catch

Beispiel

int age = 20;

Sie können das throwSchlüsselwort auch verwenden, um eine Referenznummer auszugeben, z. B. eine benutzerdefinierte Fehlernummer/ein Code für Organisationszwecke:

Beispiel

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Jede Art von Ausnahmen behandeln (...)

Wenn Sie den im Block verwendeten throw Typ nicht kennen try, können Sie die „Drei-Punkte“-Syntax ( ...) innerhalb des catchBlocks verwenden, die jede Art von Ausnahme behandelt:

Beispiel

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}