2014-09-24 129 views
1

我的环境是Windows 7 pro(32位)上的RADStudio XE4 Update1。在哪种情况下使用System.UnicodeString.Format?

我发现在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

感谢您编辑更好的阅读问题。 – sevenOfNine 2014-09-24 01:37:26

回答

2

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

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

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

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

但是,如果你对你的参数非常小心,这些差异就可以归结为品味。 。

+0

非常感谢您的回复。所以,Format()是基于Delphi的函数。而Format()是类型安全的。这就是我想知道的。我很感激。 – sevenOfNine 2014-09-24 01:36:43

相关问题