In C# würde ich eine ArgumentOutOfRange Ausnahme werfen, aber was soll ich in C++ tun?
Zuerst sollten Sie prüfen, ob das nicht eine Voraussetzung Ihre Funktion sein sollte, so dass die Verantwortung für die Überprüfung, ob der Wert im Bereich der Anrufer ist.
Wenn Sie sich für diese Option entscheiden, wäre das Aufrufen der Funktion mit einem Wert außerhalb des Bereichs ein undefiniertes Verhalten, und innerhalb der Funktion könnten Sie einfach eine Debug-Assertion haben, um mögliche Fehler zu erkennen irgendeine Ausnahme werfen.
Wenn Sie entscheiden, dass die Funktion einen breiten Vertrag haben sollte, und auf eine eindeutige Weise reagieren und eine Ausnahme auslösen, wenn das Argument außerhalb des zulässigen Bereichs liegt, können Sie eine std::out_of_range
Ausnahme auslösen.
Zum Beispiel: Ich schreibe ein libary [...]
Wenn Sie eine Bibliothek schreiben, was bedeutet, dass Sie nicht die genauen Anforderungen Ihrer Kunden in Bezug auf Leistung und Robustheit wissen Sie können in Betracht ziehen, zwei solche Funktionen bereitzustellen - eine mit einem breiten Vertrag, der Ausnahmen auslöst, und eine mit einem engen Vertrag, der davon ausgeht, dass der Client sinnvolle Eingaben liefert.
Auf diese Weise kann der Benutzer Ihrer Bibliothek basierend auf ihren Anwendungsfällen entscheiden, ob es in Ordnung ist, den Aufwand für die Überprüfung der Korrektheit der Eingabe jedes Mal zu zahlen, wenn Ihre Funktion aufgerufen wird.
Dies ist zum Beispiel der von der C++ Standard Library angenommene Strategie für std::vector
, die für den Zugriff auf Elemente der Kollektion basiert auf dem Index (diese Funktion Verhalten hat nicht definiert ein nicht-Wurf operator[]
mit einem schmalen Vertrag sieht vor, wenn die Index ist außerhalb des gültigen Bereichs) und eine Memberfunktion at()
, die die Indexprüfung durchführt und eine Ausnahme auslöst, wenn der Index außerhalb des gültigen Bereichs liegt.
mögliche Duplikate von [Wie Fehler in Konstruktor in C++ umgehen?] (Http://stackoverflow.com/questions/4989807/how-to-handle-failure-in-constructor-in -c) –
@stefan, in C++ benutzt man keine Ausnahmen, um den Programmablauf zu steuern. wegfahren von Frage - es könnte eine gute Idee sein, eine Fabrik zu machen, die alle erforderlichen Kontrollen und vermeidet die Verwendung von Ausnahmen aus falschen Gründen – ShPavel