【发布时间】:2011-09-25 21:00:13
【问题描述】:
atof、strtod、lexical_cast、stringstream 或 sprintf 有什么替代品吗?
即:
- 快
- C++ 方式(
std::string而不是char*) - 安全(无缓冲区溢出风险)
- 有效(如果无法进行转换,则返回 NaN)
- 没有外部库(独立)
我更喜欢this,一个简单的函数,经过优化,切中要害
原因:
-
atof和strtod是 C 函数,它们在失败时不会返回NaN,我更喜欢在std::string上工作,所以我只是问是否有人已经为std::string编写了一些我可以使用的包装器(如果你别介意)。 -
lexical_cast有 boost 依赖 -
stringstream很慢 -
sprintf存在缓冲区溢出风险及其 C 函数
【问题讨论】:
-
我建议您添加一些理由来说明您排除标准方法的原因。当您任意丢弃所有最好的建议时,给出建议是没有意义的(知道您可以将
atof包装在一个std::string友好的函数中。 -
您正在将浮点数转换为字符串并且您担心性能?你有什么应用程序——应用程序,而不是综合基准——你甚至可以注意到 stringsteam 是“慢”的?
-
我正在编写一个库(或包装器),以便它可以用于任何事情,而且它的综合基准测试速度很慢。
-
strtod(string.c_str(), NULL)和asprintf如何避免缓冲区溢出?公平地说,如果 C 函数解决了您的问题,我找不到任何真正的、充分的理由来避免使用 C++ 中的 C 函数。 -
@zneak:如果转换不成功,它不会返回 NaN
标签: c++ string stl floating-point