在哪种情况下使用System.UnicodeString.Format?
我的环境是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()
比使用其他功能更好?
这只是一个品味问题吗?
在内部,UnicodeString::Format()
调用Sysutils::Format()
,这是Delphi的格式化函数。请记住,大部分RTL/VCL/FMX都是用Delphi编写的,而不是C++。
在内部,UnicodeString::sprint()
改为调用C运行时的vsnwprintf()
函数。
不同的框架,不同的界面,不同的格式化规则,类似的结果。
使用UnicodeString::Format()
而不是UnicodeString::sprint()
的一个好处是Format()
在运行时执行类型检查。如果在将格式化字符串与输入参数进行比较时检测到不匹配,则会引发异常。 UnicodeString::sprintf()
没有这样做,它完全按照您在格式化字符串中指定的方式解释输入值,所以如果出现错误,那么您可能会损坏输出或彻底崩溃代码。
但是,如果你对你的参数非常小心,这些差异就可以归结为品味。 。
非常感谢您的回复。所以,Format()是基于Delphi的函数。而Format()是类型安全的。这就是我想知道的。我很感激。 – sevenOfNine 2014-09-24 01:36:43
感谢您编辑更好的阅读问题。 – sevenOfNine 2014-09-24 01:37:26