Middle
Čím jsou v C++ ukládány výjimky?
sobes.tech AI
Odpověď od AI
S objekty. Při vyhození výjimky pomocí throw je vytvořen dočasný objekt, který je poté předán mechanismu zpracování výjimek. Typ tohoto objektu určuje, který catch handler bude vybrán.
Zde je příklad, který ukazuje, jak ukládat výjimky ve formě objektů:
#include <iostream>
#include <stdexcept>
class MyException {
int error_code;
public:
MyException(int code) : error_code(code) {}
int get_code() const { return error_code; }
};
void test_func(int val) {
if (val < 0) {
// Vyhození výjimky - objekt třídy MyException
throw MyException(-1);
}
if (val == 0) {
// Vyhození standardní výjimky - objekt třídy std::runtime_error
throw std::runtime_error("Hodnota nesmí být nula.");
}
std::cout << "Hodnota je kladná: " << val << std::endl;
}
int main() {
try {
test_func(-5);
} catch (const MyException& e) {
// Zachycení výjimky podle typu objektu MyException
std::cerr << "MyException zachycena s kódem: " << e.get_code() << std::endl;
} catch (const std::runtime_error& e) {
// Zachycení výjimky podle typu objektu std::runtime_error
std::cerr << "std::runtime_error zachycen: " << e.what() << std::endl;
} catch (...) {
// Zachycení jakékoli jiné výjimky
std::cerr << "Neznámá výjimka zachycena." << std::endl;
}
try {
test_func(0);
} catch (const std::exception& e) {
// Může být zachycena základní třída pro standardní výjimky
std::cerr << "Standardní výjimka zachycena: " << e.what() << std::endl;
}
return 0;
}