Auflösen von out of range-Problemen



  • Die Art der Exception ist abhängig vom auftretenden Ausnahmefall. Bestimmte Container können zum Beispiel ebenfalls eine Exception vom Typ out_of_range werfen. Andere Arten von Exceptions wären beispielsweise bad_alloc (Speicherreservierungsfehler), bad_cast (Typumwandlungsfehler), logic_error (logischer Fehler), uvm.



  • Aber werfen den replace und erase beide ein:
    terminate called after throwing an instance of 'std::out_of_range'
    what(): basic_string::erase

    Oder steht bei replace dann:
    terminate called after throwing an instance of 'std::out_of_range'
    what(): basic_string::replace

    ???



  • Ja what() sagt natürlich aus WAS passiert ist (warum sollte da bei replace bitteschön erase stehen?). Aber beides ist eine std::out_of_range Exception.



  • [quote="HumeSikkins"]Nö. Ich habe vorher extra in den Standard geschaut und da steht (21.3.5.5)

    Requires: pos <= size()
    Throws: out_of_range if pos > size()

    Interessant. Weshalb ist das so?



  • Weil irgendwer vom Standardisierungskomitee der Meinung war, so eine klare Definition ist besser als wenn sie "undefined behaviour" liefern würden 😉


Anmelden zum Antworten