std::stoi 的基本参数

Posted

技术标签:

【中文标题】std::stoi 的基本参数【英文标题】:the base argument of std::stoi 【发布时间】:2019-09-04 14:00:47 【问题描述】:

c++的stoi函数定义为:

int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);

如您所见,base 参数默认为10,因此默认情况下它只能处理十进制数字。通过将base 设置为0,它可以通过前缀处理数字。这与strtol 的行为相同,那么为什么将默认值设置为10,而不是0

【问题讨论】:

可能是因为默认情况下,他们希望 stoi("000123456") 产生一个十进制数(仅修剪前导零),而不是使其成为一个八进制值并去除前导零。 【参考方案1】:

我编写了添加这些功能的提案。各种stoX 转换函数的目标是提供简单 转换。 Base 10 是迄今为止最常见的用法,应该是最简单的,因此是默认值。 Base 0 会导致许多初学者的问题,即为什么转换字符串 "010" 不会产生 10。如果您在 *** 上阅读了足够多的问题,您就会看到这一点——许多初学者对文字常量的规则感到困惑,并期望 @987654323 @ 将 x 初始化为 10。

【讨论】:

以上是关于std::stoi 的基本参数的主要内容,如果未能解决你的问题,请参考以下文章

cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员

std::atoi() 和 std::stoi 有啥区别?

std::stoi 的问题,不适用于 MinGW GCC 4.7.2

C++ 困境:关于 std::stoi

atoi函数和std::stoi函数的不同点

在 std::stoi 比较字节 0x90 上发现错误