gpt4 book ai didi

c++builder - 在什么情况下使用 System.UnicodeString.Format?

转载 作者:行者123 更新时间:2023-12-05 02:23:00 34 4
gpt4 key购买 nike

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

这只是品味问题吗?

最佳答案

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

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

不同的框架,不同的接口(interface),不同的格式化规则,结​​果相似。

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

但是,如果您谨慎使用参数,差异就归结为个人喜好问题。.

关于c++builder - 在什么情况下使用 System.UnicodeString.Format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006892/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com