我最近开始研究最初由其他人开发的C ++项目。
在不同平台上查看源代码的旧副本,似乎已在Windows版本中使用_ltoa
,但每次新的Linux版本时,代码都已手动更改为使用sprintf
是必需的。
我可以使用#if defined
来避免每个平台的手动更改,但有没有理由这样做,而不是仅在所有平台上使用sprintf
?
是_ltoa
以任何方式"更好"什么时候构建Windows?
修改
虽然这段代码是C ++,但我更倾向于坚持使用C函数进行这种特定的类型转换,因为生成的char数组被传递给JNI函数NewStringUTF
。
我可以使用std::to_string
,然后使用string::c_str()
来获取char数组,但这是一个额外的,不必要的函数调用。
答案 0 :(得分:3)
sprintf
可能会因为格式字符串给出的额外复杂性而稍慢。在实践中,大多数现代编译器都能够解析格式字符串,并且在简单的情况下,将其自身解析为适当的函数调用(一些ltoa
- 就像在这种情况下一样)。
因此,我使用sprintf
并避免搞乱特定于实现的东西。