c++的stoi
函数定义如下:
int stoi(const std::string& str, std::size_t* pos = 0, int base = 10);
如你所见,base
参数默认为10
,因此默认只能处理十进制数。通过将base
设置为0
,可以根据数字前缀处理数字。这与strtol
的行为相同,那么为什么将默认值设置为10
而不是0
?
我写了提案,增加了这些功能。各种stoX
转换函数的目标是提供简单的转换。十进制远远是最常见的用法,应该是最简单的,因此是默认值。基础为0将导致许多初学者关于为什么将字符串"010"
转换不产生10的问题。如果你读足够多的Stackoverflow上的问题,你会看到这一点——许多初学者对于文字常量的规则感到困惑,并期望int x = 010;
将初始化x
为10。
stoi("000123456")
返回一个十进制数(去掉前导零),而不是返回去掉前导零的八进制值。 - NathanOliver