C ++ 98替代std :: stoul?

时间:2016-03-02 14:25:24

标签: c++ c++98

我在这里使用此代码遇到了麻烦:

unsigned long value = stoul ( s, NULL, 11 );

用c ++ 98

给我这个错误
error: 'stoul' was not declared in this scope

它适用于C ++ 11,但我需要在C ++ 98上使用它。

1 个答案:

答案 0 :(得分:6)

您可以使用cstdlib中的strtoul

unsigned long value = strtoul (s.c_str(), NULL, 11);

一些差异:

  1. std::stoul的第二个参数是size_t *,它将被设置为转换后的数字后的第一个字符的位置,而strtoul的第二个参数的类型为{{ 1}}并指向转换后的数字后的第一个字符。
  2. 如果没有发生转换,char **会抛出invalid_argument异常,而std::stoul则不会(您必须检查第二个参数的值)。通常,如果要检查错误:
  3. strtoul
    1. 如果转换后的值超出char *ptr; unsigned long value = strtoul (s.c_str(), &ptr, 11); if (s.c_str() == ptr) { // error } 的范围,unsigned long会在std::stoul返回strtoul时抛出out_of_range例外并设置ULONG_MAX } errno
    2. 以下是std::stoul自定义版本,其行为应与标准版本相同,并总结了ERANGEstd::stoul之间的差异:

      strtoul