例如,我已经阅读了一些有关每个文件的文件
http://www.cplusplus.com/reference/string/stof/
http://www.cplusplus.com/reference/cstdlib/atof/
我知道atof
是<cstdlib>
的一部分,并且以const char*
作为输入参数,而std::stof
是<string>
的一部分,并且具有不同的输入格式。
但是不清楚,
float
值?答案 0 :(得分:8)
我假设您打算将std::atof
与std::stod
(两者都返回std::atof
)进行比较。
仅比较两个链接的参考页面会产生以下差异:
char*
使用std::stod
,而std::string
使用std::wstring
或std::stod
(即,它支持宽字符串)pos
参数不是NULL
(用于进一步解析字符串),double
还将返回第一个未转换字符的索引。std::atof
的范围内,则std::stod
将返回一个未定义的值,而std::out_of_range
将抛出一个std::atof
异常(绝对优于一个未定义的值)0.0
将返回std::stod
,而std::invalid_argument
将引发0.0
异常(易于区分 actual 转换为std::stod
)这些都是<img srcset="elva-fairy-320w.jpg 320w,
elva-fairy-480w.jpg 480w,
elva-fairy-800w.jpg 800w"
sizes="(max-width: 320px) 280px,
(max-width: 480px) 440px,
800px"
src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">
的积极点,使其成为2的更高级替代。
答案 1 :(得分:1)
桑德所说的一切都是正确的。但是,您专门问过:
它们可以互换使用吗?
答案是否定的,至少在一般情况下不是。如果您使用的是atof,则很可能拥有旧版C代码。在这种情况下,您必须谨慎地引入可能引发异常的代码,尤其是在“常规”情况下,例如用户输入错误的代码。
它们是否通过相同的输入转换为相同的float
值?
不。它们都转换为double
值,而不是浮点数。 (据我所知)标准并不能特别保证转换为相同的值,并且四舍五入的地方可能略有不同。但是,在给出有效输入的情况下,如果同一编译器中两者的返回值之间存在差异,我将感到非常惊讶。
哪种方案最适合用于这些方案?
如果:
然后我建议使用std :: stod。否则,您可以考虑使用atof。