我的环境是Windows7pro上的RADStudio XE4 Update1 (32位)。
我发现在C++生成器中有一个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()比使用其他函数使用得更好?
这只是味道的问题吗?
发布于 2014-09-24 01:13:23
在内部,UnicodeString::Format()调用Sysutils::Format(),这是Delphi的格式化函数。请记住,RTL/VCL/FMX的大部分是用Delphi编写的,而不是C++。
在内部,UnicodeString::sprint()调用C运行时的vsnwprintf()函数。
不同的框架,不同的接口,不同的格式化规则,相似的结果。
使用UnicodeString::Format()而不是UnicodeString::sprint()的一个好处是Format()在运行时执行类型检查。如果它在将格式化字符串与输入参数进行比较时检测到不匹配,则会引发异常。UnicodeString::sprintf()没有这样做,它解释的输入值与您在格式化字符串中指定的值完全相同,所以如果您出错了,那么您就有可能破坏输出或彻底崩溃代码。
但是,如果你小心你的参数,差异归结为品味的问题。。
https://stackoverflow.com/questions/26006892
复制相似问题