Junior
Co jsou výjimky v C++?
sobes.tech AI
Odpověď od AI
Mechanismus pro zpracování abnormálních situací (chyb), které nastávají během běhu programu. Umožňuje oddělit kód odpovědný za logiku programu od kódu pro zpracování chyb.
Klíčová slova:
try: Definuje blok kódu, ve kterém mohou nastat výjimky.catch: Definuje blok kódu, který se vykoná při výskytu určitého typu výjimky.throw: Generuje (vytváří) výjimku. Typ výjimky může být jakýkoli objekt.
Princip fungování:
- Kód, který může způsobit chybu, je umístěn do bloku
try. - Pokud dojde k výjimce v bloku
try(generované pomocíthrow), běh programu je přerušen. - Systém hledá vhodný blok
catch, který je schopen zpracovat generovanou výjimku (podle typu). - Pokud je nalezen odpovídající
catch, jeho kód se vykoná. - Pokud není na aktuální úrovni volání nalezen odpovídající
catch, výjimka "se šíří" vzhůru po zásobníku volání, dokud není nalezena vhodná funkce pro zpracování (nebo program skončí nesprávně).
Příklad:
#include <iostream>
#include <stdexcept> // Pro standardní typy výjimek
int divide(int a, int b) {
if (b == 0) {
throw std::runtime_error("Dělení nulou!"); // Generování výjimky
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Volání funkce, která může vyvolat výjimku
std::cout << "Výsledek: " << result << std::endl; // Tato řádka se nevykoná
} catch (const std::runtime_error& e) { // Zachycení výjimky typu std::runtime_error
std::cerr << "Chyba: " << e.what() << std::endl; // Zpracování výjimky
} catch (...) { // Zachycení jakékoli jiné výjimky
std::cerr << "Nastala neznámá chyba." << std::endl;
}
std::cout << "Program pokračuje po zpracování chyby." << std::endl;
return 0;
}
Výhody:
- Oddělení logiky a zpracování chyb.
- Zjednodušení hlavního toku kódu.
- Možnost zpracování chyb na různých úrovních hierarchie volání.
Nevýhody:
- Může ovlivnit výkon (kvůli šíření zásobníku).
- Obtížnější pochopení toku provádění při více výjimkách.
- Nesprávné použití může vést ke ztrátám zdrojů (pokud zdroje nejsou správně uvolněny při výskytu výjimky před jejich správným uvolněním).
Pro bezpečnou práci se zdroji při výskytu výjimek se často používá RAII (Resource Acquisition Is Initialization) a chytré ukazatele.