便利な関数であるのですが、「投げ得る例外が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 件のコメント:
コメントを投稿