我的环境是Windows 7专业版(32位)上的RADStudio XE4 Update1。
我发现在C ++ Builder中有一个System::UnicodeString::Format()
静态方法。
Format()
可以如下使用。但是,我认为可以使用String().sprintf()
执行相同的操作。
String str;
// --- (1) ---
str = String::Format(L"%2d, %2d, %2d", ARRAYOFCONST((10, 2, 3)));
ShowMessage(str); // 10, 2, 3
// --- (2) ---
str = String().sprintf(L"%2d, %2d, %2d", 10, 2, 3);
ShowMessage(str); // 10, 2, 3
我的问题是在哪种情况下使用Format()
比使用其他功能更好?
这只是品味问题吗?
答案 0 :(得分:2)
在内部,UnicodeString::Format()
调用Sysutils::Format()
,这是Delphi的格式化功能。请记住,大部分RTL / VCL / FMX都是用Delphi编写的,而不是C ++。
在内部,UnicodeString::sprint()
会调用C运行时的vsnwprintf()
函数。
不同的框架,不同的界面,不同的格式规则,类似的结果。
使用UnicodeString::Format()
代替UnicodeString::sprint()
的一个好处是Format()
在运行时执行类型检查。如果在将格式化字符串与输入参数进行比较时检测到不匹配,则会引发异常。 UnicodeString::sprintf()
不会这样做,它会完全按照您在格式化字符串中指定的方式解释输入值,因此如果您遇到错误,则可能会破坏输出或直接导致代码崩溃。
但是,如果你对参数很谨慎,那么差异就归结为品味。