例如,我读过关于每一份文件的文件。
http://www.cplusplus.com/reference/string/stof/
http://www.cplusplus.com/reference/cstdlib/atof/
我理解atof
是<cstdlib>
的一部分,以const char*
作为输入参数,std::stof
是<string>
的一部分,具有不同的输入格式。
但还不清楚,
float
值?发布于 2019-09-10 07:17:09
我想您是想比较std::atof
和std::stod
(都返回double
)。
只需比较这两个链接的参考页面,就会产生以下差异:
std::atof
采用char*
,而std::stod
采用std::string
或std::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的更先进的替代方案。
发布于 2020-06-18 17:34:01
桑德说的一切都是正确的。然而,你特别要求:
可以互换使用吗?
答案是否定的,至少在一般情况下不是这样。如果您正在使用atof,则使用遗留C代码的可能性很大。在这种情况下,您必须小心引入可以抛出异常的代码,特别是在“例程”情况下,例如当用户输入错误时。
它们是否以相同的输入转换为相同的float
值?
不是的。它们都转换为double
值,而不是浮点。标准(据我所知)并没有具体保证转换到相同的值,而且有可能在某个地方出现了略有不同的结果。但是,给定有效的输入,如果在同一个编译器中两个返回值之间存在差异,我会感到非常惊讶。
对每一种情况最好使用什么方案?
如果:
然后我建议使用std::stod。否则,您可以考虑使用atof。
https://stackoverflow.com/questions/57865389
复制相似问题