首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::stof和atof每一种应该使用的区别是什么?

std::stof和atof每一种应该使用的区别是什么?
EN

Stack Overflow用户
提问于 2019-09-10 06:47:39
回答 2查看 4.8K关注 0票数 5

例如,我读过关于每一份文件的文件。

http://www.cplusplus.com/reference/string/stof/

http://www.cplusplus.com/reference/cstdlib/atof/

我理解atof<cstdlib>的一部分,以const char*作为输入参数,std::stof<string>的一部分,具有不同的输入格式。

但还不清楚,

  • 它们是否可以互换使用:
  • 它们是否以相同的输入转换为相同的float值?
  • 对于其中的每一种情况,最好使用哪种场景?
EN

回答 2

Stack Overflow用户

发布于 2019-09-10 07:17:09

我想您是想比较std::atofstd::stod (都返回double)。

只需比较这两个链接的参考页面,就会产生以下差异:

  • std::atof采用char*,而std::stod采用std::stringstd::wstring (即。它支持宽字符串)
  • 如果std::stod参数不是NULL (用于进一步解析字符串),则pos还将返回第一个未转换字符的索引。
  • 如果转换后的值不属于double的范围,std::atof将返回一个未定义的值,而std::stod将抛出std::out_of_range异常(肯定比未定义的值更好)
  • 如果不能执行转换,std::atof将返回0.0,而std::stod将抛出std::invalid_argument异常(更容易与实际转换的0.0区分)

这些都是std::stod的优点,使其成为2的更先进的替代方案。

票数 12
EN

Stack Overflow用户

发布于 2020-06-18 17:34:01

桑德说的一切都是正确的。然而,你特别要求:

可以互换使用吗?

答案是否定的,至少在一般情况下不是这样。如果您正在使用atof,则使用遗留C代码的可能性很大。在这种情况下,您必须小心引入可以抛出异常的代码,特别是在“例程”情况下,例如当用户输入错误时。

它们是否以相同的输入转换为相同的float 值?

不是的。它们都转换为double值,而不是浮点。标准(据我所知)并没有具体保证转换到相同的值,而且有可能在某个地方出现了略有不同的结果。但是,给定有效的输入,如果在同一个编译器中两个返回值之间存在差异,我会感到非常惊讶。

对每一种情况最好使用什么方案?

如果:

  • 您有一个符合标准的C++ 11或更高版本的编译器,并且
  • 您的代码可以容忍异常(或者您愿意在每次调用时捕获它们),并且
  • 您已经有了一个std::string,或者转换的性能不重要。
  • 或者,如果你是C++初学者,不知道这些问题的答案。

然后我建议使用std::stod。否则,您可以考虑使用atof。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57865389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档