質問: std::stoi(str); ``` **【やってみたこと】** 試しにtry文を書いてみましたが、以下のエラーを吐きcatchできません。 可能なら、エラー内容1の様な情報が得られると嬉しいです。。。 --ソース一部 ``` string str; cin >> str; try { cout << std::stoi(str) * 2 << endl; } catch (char *e) {> // これだとハンドルできない // 引数に...を指定すればそのcatchがハンドルするけど・・・ } ``` --エラー内容1(VisualStudio2015でデバッグ実行したとき) > > ${アドレス1} で例外がスローされました (ConsoleApplication1.exe 内): Microsoft C++ の例外: std::out_of_range (メモリの場所 ${アドレス2}) > > > --エラー内容2(デバッグ実行しなかったとき) > > Debug Error! > > Program: > > ...${実行ファイルのアドレス} > > abort() has been called > > (Press Retry to debug the application) > > > 【環境】 OS:windows7 64bit 処理系:Visual C++ IDE:VisualStudio2015 【余談】 例えば、javaのtry文では特定の拡張されたExceptionクラスを指定しなくともとりあえずExceptionを指定しておけば、スタックトレースを吐かせられますが、c++では細かく指定しないとだめなのでしょうか・・・? 稚拙で申し訳ないですが、ここまで、ご覧くださりありがとうございます! 質問方法への指摘等でも結構ですので、ぜひご意見ください。
回答: C言語になりますが、`strtol`関数は`errno`から判定できるようです。 オーバーフロー、アンダーフローのときに`ERANGE`が設定される。 C++の場合、`std::strtol`で同様の動きになるようです。 ご提示の`std::stoi`でも、内部的にはstrtolを使っているようなので、同様の判定ができるみたいですね。