C++ 11には、新しい文字列変換関数がいくつか追加されました。
http://en.cppreference.com/w/cpp/string/basic_string/stoul
Stoi(stringからint)、stol(stringからlong)、stoll(stringからlong long)、stoul(stringからunsigned long)、stoull(stringからunsigned long long)が含まれます。それがない場合に注目すべきは、stou(文字列から符号なし)関数です。必要ではないが、他のすべてが必要な理由はありますか?
最もパットな答えは、Cライブラリには対応する「strtou
」がなく、C++ 11文字列関数はすべてCライブラリ関数の薄いベールラッパーであるということです。_std::sto*
_関数のミラー_strto*
_、および_std::to_string
_関数はsprintf
を使用します。
編集:KennyTMが指摘しているように、stoi
とstol
の両方は、基になる変換関数としてstrtol
を使用しますが、stoul
が存在するのに、なぜstrtoul
を使用し、対応するstou
はありません。
stoi
は存在するがstou
は存在しない理由はわかりませんが、stoul
と架空のstou
との唯一の違いは、結果がunsigned
の範囲:
unsigned stou(std::string const & str, size_t * idx = 0, int base = 10) {
unsigned long result = std::stoul(str, idx, base);
if (result > std::numeric_limits<unsigned>::max()) {
throw std::out_of_range("stou");
}
return result;
}
(同様に、stoi
もstol
と似ていますが、範囲チェックが異なるだけです。しかし、既に存在するため、正確に実装する方法を心配する必要はありません。)