在哪种情况下使用System.UnicodeString.Format?

时间:2014-09-24 00:58:47

标签: c++builder

我的环境是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()比使用其他功能更好?

这只是品味问题吗?

1 个答案:

答案 0 :(得分:2)

在内部,UnicodeString::Format()调用Sysutils::Format(),这是Delphi的格式化功能。请记住,大部分RTL / VCL / FMX都是用Delphi编写的,而不是C ++。

在内部,UnicodeString::sprint()会调用C运行时的vsnwprintf()函数。

不同的框架,不同的界面,不同的格式规则,类似的结果。

使用UnicodeString::Format()代替UnicodeString::sprint()的一个好处是Format()在运行时执行类型检查。如果在将格式化字符串与输入参数进行比较时检测到不匹配,则会引发异常。 UnicodeString::sprintf()不会这样做,它会完全按照您在格式化字符串中指定的方式解释输入值,因此如果您遇到错误,则可能会破坏输出或直接导致代码崩溃。

但是,如果你对参数很谨慎,那么差异就归结为品味。