' P '

whatever I will forget

C++ 例外処理の基本

基本は、例外が起こりそうな場合のロジックを 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;
}