|
|
1
2
我可能会同意您在问题中的建议,因为没有内置的ftoa()函数,sprintf提供了对格式的控制。谷歌搜索“ftoa asm”会得到一些可能有用的结果,但我不确定你是否想这么做。 |
|
|
2
23
我相信有人会说boost::lexical-cast,所以如果你在使用boost,那就说吧,但无论如何,它基本上是相同的:
请注意,您可以很容易地将其转换为一个模板,该模板可以处理任何可以插入流的内容(而不仅仅是双模板)。 |
|
3
10
http://www.cplusplus.com/reference/iostream/stringstream/
|
|
|
4
4
促进:: lexical_cast &; |
|
|
5
4
在Dinkumware STL上,字符串流由C库snprintf填充。 因此,直接使用snprintf格式将与stl格式部分相当。 但有人曾经告诉我,整体大于或等于其已知部分之和。 因为它将依赖于平台,以确定Stringstream是否会进行分配(我非常肯定,Dinkumware还没有在Stringstream中包含一个小的缓冲区,用于转换像您这样的单个项目),所以确实怀疑任何需要分配(尤其是多线程)的东西都能与snprintf竞争。 事实上(格式化+分配)有可能非常糟糕,因为一个分配和一个发行版可能需要在多线程环境中进行2个完整的读-修改-写循环,除非分配实现有一个线程本地小堆。 也就是说,如果我真的关心性能,我会接受上面其他一些评论的建议,更改接口以包含一个大小并使用snprintf-即。
如果您想要一个std::string,那么最好使用上面的方法并从结果char*中实例化字符串,因为std::stringstream、std::string解决方案将涉及2个分配+2个发布。 顺便说一句,我不知道问题中的“字符串”是std::string还是只是“string”的通用ASCII字符用法。 |
|
|
6
3
最好的做法是构建一个简单的模板化函数,将任何可流类型转换为字符串。我是这样做的:
如果您想要一个const char*表示,只需替换上面的conv.str().c_str()。 |
|
|
7
2
我会说
|
|
|
8
1
如果您使用qt4框架,您可以:
|
|
|
9
1
Herb Sutter对将int转换为字符串的替代方法做了广泛的研究,但我认为他的论点也适用于double。 他研究了模板中安全性、效率、代码清晰性和可用性之间的平衡。 |
|
|
10
0
|
|
|
11
0
这是一条非常有用的线。我使用sprintf_,但我开始怀疑它是否真的比其他方法更快。我在Boost网站上看到了以下文档,其中显示了printf/scanf、stringstream和boost之间的性能比较。 double-to-string是我们在代码中进行的最常见的转换,所以我将坚持使用我一直使用的方法。但是,在其他场景中使用boost可能是您的决定因素。 http://www.boost.org/doc/libs/1_58_0/doc/html/boost_lexical_cast/performance.html |
|
|
12
0
将来,你可以使用
有关MSVC详细信息的详细讨论,请参阅 https://www.reddit.com/r/cpp/comments/a2mpaj/how_to_use_the_newest_c_string_conversion/eazo82q/ |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |