2 Stimmen

Strukturierte Ausnahmen (SE) von Standardbibliothek aufrufen

Ich habe Code, der ::fgetpos aufruft, was zu einer Kernel-Ausnahme führt, die nicht abgefangen werden kann (in meinem VS-2008-Projekt habe ich die Option /ehs). Aber ich kann nicht anders, als zu denken, dass Standardbibliotheksroutinen solche Ausnahmen niemals auslösen sollten.

Update: Ich habe versucht, ::fgetpos(0, &foo) aufzurufen, was offensichtlich falsch ist, und tatsächlich erhielt ich eine Kernel-Ebene-Ausnahme. Ich bin verwirrt. Warum würde die C++-Standardbibliothek nicht die einfachsten Überprüfungen der Argumente durchführen (Überprüfung auf Nullzeiger) und eine std::invalid_argument werfen?

Führen irgende Standardbibliotheksroutinen solche grundlegenden Überprüfungen durch, oder beenden sie alle fröhlich das Programm?

1voto

GManNickG Punkte 476445

Warum würde die C++-Standardbibliothek nicht die einfachsten Argumentprüfungen durchführen (Überprüfung auf Nullzeiger)

Weil du das selbst machen kannst, wenn du die Überprüfung brauchst. Die Philosophie von C++ ist, dass du nicht für das bezahlen musst, was du nicht brauchst. Wenn ich ein kluger Programmierer bin und niemals ungültige Argumente an die Funktion übergebe, warum sollte dann die Leistung meines Programms möglicherweise durch unnötige Überprüfungen beeinträchtigt werden?

Deshalb bietet z.B. std::vector sowohl operator[] als auch at() an, wobei letzteres eine Grenzüberprüfung durchführt und ersteres nicht. Wenn du die Überprüfung benötigst, füge sie hinzu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X