この動作はどこにもかかれていないが
catch
内 throw
の問題記事を書いている内に見つけたものなのだが、
#include <iostream>
#include <stdexcept>
int main( void ) {
try{
try{
throw std :: runtime_error( "Error!" );
}
catch( std :: exception& e ){
throw e; //<- Here
}
}
catch( std :: exception& e ){
std :: cerr << e.what() << std :: endl;
}
return 0;
}
上位 try
catch
へ catch
の引数を渡しているのだが、これをすると実行結果は
std::exception
Program ended with exit code: 0
最初のコンストラクタで引数に入れた文字列が std :: exception
クラスの初期値で上書きされてしまう。
誤って渡してしまわないように注意しなければならない。