便利な関数であるのですが、「投げ得る例外が2種類ある」という点はやや意外ですので、注意が必要です。
#include <iostream> #include <string> int main(void) { // 正常に整数を取得 int i = std::stoi("123"); std::cout << i; // => "123" // 文字列から整数を取得できない // std::stoi() からstd::invalid_argumentが投げられる try { std::cout << std::stoi("abc"); } catch (const std::invalid_argument& e) { std::cout << "invalid_argument"; // => "invalid_argument" } // 整数を取得できるが、intに入り切らない // std::stoi() からstd::out_of_rangeが投げられる try { std::cout << std::stoi("9999999999"); } catch (const std::out_of_range& e) { std::cout << "out_of_range"; // => "out_of_range" } }個人的には、例外送出が2種類あるというのは仕様として良くないと思います。
std::out_of_range は止めて std::invalid_argument 一本に絞った方が良かったと思います。
0 件のコメント:
コメントを投稿