Was ist der Ersatz für den veralteten std::unexpected_handler? [geschlossen]C++

Programme in C++. Entwicklerforum
Guest
 Was ist der Ersatz für den veralteten std::unexpected_handler? [geschlossen]

Post by Guest »

Laut cppreference ist std::unexpected_handler in C++11 veraltet und in C++17 entfernt. Das Gleiche gilt für verwandte Funktionen std::unexpected, std::set_unexpected, std::get_unexpected. Mir ist aufgefallen, dass einige davon in der Frage „Was ist der Unterschied zwischen der Deklaration einer Funktion als __attribute__(nothrow) und „throw()““ erwähnt wurden, aber seit dieser Frage hat sich viel geändert.
Was ist der Grund für die Entfernung dieser Funktionen? Wie kann ich sie nach dem Upgrade auf C++17 ersetzen?

Code: Select all

// function that throws exception that is not specified
void foo() throw(std::logic_error) {
throw std::runtime_error();
}

// function that throws exceptions, but no are specified
void bar() throw() {
throw std::runtime_error();
}

void handler() {
...
}

int main() {
std::set_unexpected(handler);
...
}
Bearbeiten
Um ein ähnliches Verhalten zu erreichen, kann std::unexpected_handler durch std ersetzt werden: :terminate_handler. Auf diese Weise wird derselbe Handler für
aufgerufen

Code: Select all

// dynamic exception specification is not valid int C++17, so it is removed
void foo() {
throw std::runtime_error();
}

// throw() is replaced with noexcept
void bar() noexcept {
throw std::terminate_handler();
}

void handler() {
...
}

int main() {
std::terminate_handler(handler);
...
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post