std::stoi的基本参数是什么?

8

c++的stoi函数定义如下:

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

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


6
可能是因为默认情况下,他们希望 stoi("000123456") 返回一个十进制数(去掉前导零),而不是返回去掉前导零的八进制值。 - NathanOliver
1个回答

15

我写了提案,增加了这些功能。各种stoX转换函数的目标是提供简单的转换。十进制远远是最常见的用法,应该是最简单的,因此是默认值。基础为0将导致许多初学者关于为什么将字符串"010"转换不产生10的问题。如果你读足够多的Stackoverflow上的问题,你会看到这一点——许多初学者对于文字常量的规则感到困惑,并期望int x = 010;将初始化x为10。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接