2014-09-24 135 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

相關問題