以下是我的一个令人头疼的例子:
我们有一个多平台项目,主要使用Unicode字符串将文本渲染到屏幕上。在VC ++中的窗口上行:
swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);
编译好并将宽字符串打印到另一个宽字符串中。 但是,这应该是:
swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);
如果不用'%ls'替换'%s',这将无法在其他平台上运行。因为在我们的Windows环境中进行测试更容易,更快速,并且更容易调试。这些错误很容易被忽视。
我知道最好的解决方案是首先编写正确的代码,但是在压力下会出现简单的错误,在这种特殊情况下,错误很容易被忽视很长一段时间。
我怀疑这种错误有很多变化,我们还没有享受。
有没有人找到这种错误的好方法?
:D
答案 0 :(得分:4)
如果Boost.Format对您的需求太慢,您可能需要查看FastFormat。
与stringstreams和Boost.Format相比:
- IOStreams:FastFormat.Format是 两者之间比IOStream更快 ~100-900%,在所有情况下
- Boost.Format:FastFormat.Format是 比Boost.Format更快 在所有情况下,约为400-1650%
答案 1 :(得分:2)
因为*printf
家族的所有功能都不是类型安全的,所以