Eccezioni C++


Eccezioni C++

Quando si esegue codice C++, possono verificarsi diversi errori: errori di codifica commessi dal programmatore, errori dovuti a input errati o altre cose imprevedibili.

Quando si verifica un errore, C++ normalmente si interrompe e genera un messaggio di errore. Il termine tecnico per questo è: C++ genererà un'eccezione (genera un errore).


C++ prova a catturare

La gestione delle eccezioni in C++ è costituita da tre parole chiave: try, throwe catch:

L' tryistruzione consente di definire un blocco di codice da testare per verificare la presenza di errori durante l'esecuzione.

La throwparola chiave genera un'eccezione quando viene rilevato un problema, che ci consente di creare un errore personalizzato.

L' catchistruzione consente di definire un blocco di codice da eseguire, se si verifica un errore nel blocco try.

Le parole chiave trye catchsono in coppia:

Esempio

try {
  // Block of code to try
  throw exception; // Throw an exception when a problem arise
}
catch () {
  // Block of code to handle errors
}

Considera il seguente esempio:

Esempio

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw (age);
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Age is: " << myNum;
}

Esempio spiegato

Usiamo il tryblocco per testare del codice: se la agevariabile è minore di 18, faremo throwun'eccezione e la gestiamo nel nostro catchblocco.

Nel catchblocco, catturiamo l'errore e facciamo qualcosa al riguardo. L' catch istruzione accetta un parametro : nel nostro esempio utilizziamo una intvariabile ( myNum) (perché stiamo lanciando un'eccezione di inttipo nel tryblocco ( age)), per produrre il valore di age.

Se non si verifica alcun errore (ad esempio se ageè 20invece di 15, il che significa che sarà maggiore di 18), il catchblocco viene saltato:

Esempio

int age = 20;

Puoi anche utilizzare la throwparola chiave per generare un numero di riferimento, ad esempio un numero/codice di errore personalizzato per scopi organizzativi:

Esempio

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (int myNum) {
  cout << "Access denied - You must be at least 18 years old.\n";
  cout << "Error number: " << myNum;
}

Gestisci qualsiasi tipo di eccezione (...)

Se non conosci il throw tipo utilizzato nel tryblocco, puoi utilizzare la sintassi dei "tre punti" ( ...) all'interno del catchblocco, che gestirà qualsiasi tipo di eccezione:

Esempio

try {
  int age = 15;
  if (age >= 18) {
    cout << "Access granted - you are old enough.";
  } else {
    throw 505;
  }
}
catch (...) {
  cout << "Access denied - You must be at least 18 years old.\n";
}