基本は、例外が起こりそうな場合のロジックを try
ブロックで囲んでおく。
その後、例外処理させたい処理を catch
ブロックに記述する。
気をつけないといけないのは、 catch
が無い場合、プログラムはどこにエラーを吐いていいのかわからず、異常終了する場合がある。
サンプルのコードは、 int
を0で割ろうとしたとき、クラッシュさせずにエラーメッセージをprintする、簡単なプログラム。
#include <iostream> double calculate_km_per_liter (int km, int liter){ if (km == 0) { throw 0; } if (km < 0 || liter < 0){ throw std::string("Negative value error"); } return static_cast<double>(km)/(liter); } int main(){ int km {}; int liter {}; double km_per_liter {}; std::cout << "Enter km you want to run : "; std::cin >> km; std::cout << "Enter liter you bought : "; std::cin >> liter; try{ km_per_liter = calculate_km_per_liter(km, liter); std::cout << "Result : " << km_per_liter << std::endl; } catch(int &ex){ std::cerr << "Tried to devide by zero" << std::endl; } catch(std::string &ex){ std::cerr << ex << std::endl; } std::cout << "Bye" << std::endl; return 0; }