【发布时间】:2021-12-30 12:32:51
【问题描述】:
我正在尝试优化我的软件,为此我需要改变我存储和绘制事物的方式。
很多人说 fmt 在做这些事情上比 iostream 快得多,但我坐在这里试图了解我做错了什么。
旧代码正在运行:
auto type = actor->GetName();
char name[0x64];
if (type.find("AI") != std::string::npos)
sprintf(name, "AI [%dm]", dist);
新的不是:
auto type = actor->GetName();
char name[0x64];
if (type.find("AI") != std::string::npos)
fmt::sprintf("AI [%dm]", dist);
我做错了什么?
【问题讨论】:
-
Sooo 你认为
fmt::sprintf将其输出存储在哪里?char name[0x20]在sprintf上面做什么?以及为什么不使用fmt::format的任何具体原因? -
fmt::sprintf不将输出缓冲区作为参数,而是返回std::string。尝试使用该返回值。 -
你仍然没有使用你对
fmt::sprintf的调用的返回值。 -
除非您确实执行大量格式化 I/O(您不应该这样做),否则任何一个版本的性能都无关紧要。
-
阅读 fmt 的文档以了解如何使用函数。