Ce face std::unreachable
Pui std::unreachable() într-un loc pe care știi sigur că programul nu îl atinge, de exemplu pe ramura default a unui switch care tratează deja toate valorile posibile. Compilatorul poate apoi elimina verificări inutile.
Este o promisiune, nu o verificare: dacă execuția ajunge totuși acolo, comportamentul este nedefinit (programul poate face orice). Nu îl folosi pentru erori care pot apărea în realitate; pentru acelea aruncă o excepție.
Ce returnează
Nu returnează niciodată.
Exemple
Exemplul 1: Un switch care tratează toate cazurile
Funcția tratează toate cele trei valori ale enumerării, așa că ramura default nu este atinsă niciodată.
#include <print>
#include <utility>
enum class Semafor { Rosu, Galben, Verde };
const char* actiune(Semafor s) {
switch (s) {
case Semafor::Rosu: return "Stai";
case Semafor::Galben: return "Atenție";
case Semafor::Verde: return "Treci";
}
std::unreachable();
}
int main() {
std::println("{}", actiune(Semafor::Verde));
std::println("{}", actiune(Semafor::Rosu));
}
Rezultat
Treci
Stai
Greșeli frecvente
- Îl folosești pentru date venite din afară (citite de la tastatură sau din fișier). O valoare neașteptată duce la comportament nedefinit, nu la o eroare clară. Verifică datele și aruncă o excepție.
Comenzi înrudite
switch, case, default: Alege una dintre mai multe ramuri după valoarea unei expresii întregi, a unui caracter sau a unui enum.assert: Verifică o condiție care trebuie să fie mereu adevărată; dacă e falsă, oprește programul cu un mesaj.std::terminate: Oprește imediat programul; este apelată automat când o excepție nu este prinsă nicăieri.