我正在将一些应用程序从用于 C 字符串的 wchar_t 移植到 C++11 提供的 char16_t。
虽然我有问题。我发现可以处理 char16_t 类型的 snprintf 的唯一库是 ICU 及其 UChar 类型。
u_snprintf_u(等效于 swprintf/snprintf,但以 Uchar 作为参数)的性能差强人意。
一些测试导致 u_snprintf_u 比 snprintf 慢 25 倍。
我在 valgrind 上得到的示例:
如您所见,底层代码正在做太多工作并实例化我不想要的内部对象。
编辑:我正在使用的数据不需要由底层 ICU 代码解释。它是面向ASCII的。我没有找到任何方法告诉 ICU 不要尝试在此类函数调用上应用语言环境等。