atoi
和之间有什么区别stoi
?
我知道,
std::string my_string = "123456789";
Run Code Online (Sandbox Code Playgroud)
要将该字符串转换为整数,您必须执行以下操作:
const char* my_c_string = my_string.c_str();
int my_integer = atoi(my_c_string);
Run Code Online (Sandbox Code Playgroud)
C++ 11提供了简洁的替代品:
std::string my_string = "123456789";
int my_integer = std::stoi(my_string);
Run Code Online (Sandbox Code Playgroud)
1).这两者之间还有其他差异吗?
2).效率和性能明智哪一个更好?
3).哪个更安全?
Ali*_*Ali 53
1).这两者之间还有其他差异吗?
我发现std::atoi()
一个可怕的功能:它在出错时返回零.如果将零视为有效输入,则无法判断转换期间是否存在错误或输入为零.那太糟糕了.请参阅示例如何判断c函数atoi是否失败或者是否为零字符串?
另一方面,相应的C++函数将在出错时抛出异常.您可以正确区分错误和零作为输入.
2).效率和性能明智哪一个更好?
如果您不关心正确性,或者您确定不会将零作为输入,或者您认为该错误仍然存在,那么,也许C函数可能更快(可能是由于缺少异常处理).这取决于您的编译器,标准库实现,硬件,输入等.最好的方法是测量它.但是,我怀疑差异,如果有的话,可以忽略不计.
如果你需要一个快速(但丑陋的C风格)实现,那么对于如何在C++中将字符串解析为int的最受欢迎的答案?问题似乎合理.但是,除非绝对必要,否则我不会采用该实现(主要是因为必须混乱char*
和\0
终止).
3).哪个更安全?
见第一点.
除此之外,如果你需要工作char*
并注意\0
终止,你更容易犯错误; std::string
因为它将照顾所有这些东西,因此更容易和更安全.
归档时间: |
|
查看次数: |
41484 次 |
最近记录: |