2011-10-31 61 views
0

我想將我的Windows代碼移植到本地C++,並且需要擺脫所有CLI代碼。我發現.NET在解析文本輸入方面非常有幫助,但是當我開始用C++重新編寫它時,我仍然習慣於用C代碼,代碼爲fseekchar *代替String。查找C++在std命名空間中有一個string類型,我打開了我的STL文檔(來自zip存檔),發現"string_discussion.html"開始於「SGI STL中的字符串」,並繼續描述可能導致間歇性錯誤的疏忽。什麼是最好的,交叉平臺,解析文本文件的方式?

std::string安全嗎?如果有的話,std與STL有什麼關係?是C文件IO 危險和C++流和字符串IO好多了嗎?

+2

如果你想在C++編寫,爲什麼這個問題還標記爲C? – arne

+0

最好的跨平臺方式是使用Qt框架。 –

+1

也許最好從修改一些C++基礎知識開始(FAQ有很多書籍)。例如,SGI STL從1994年開始,在現代C++中完全不相關,所以如果您知道標準庫的基礎知識,那麼您會更好。 –

回答

2

在文檔中描述的問題存在於一些編譯器,特別是MSVC,但我從來沒有遇到過現實世界中的實際問題。 GNU編譯器實現所描述的「不可共享」字符串,即使用非const operator[]使字符串不可共享,並在需要時創建副本。

根據定義,STL類不是線程安全的,並且如果從多個線程訪問,則需要被鎖包圍;我認爲這是一個功能,因爲它使它們顯着更快,並允許實現無鎖算法。

std和STL之間的關係基本上是在STL已經集成到其生活在std命名空間中的C++標準庫。該標準自從發展以來,但基本上保持兼容。

一般來說它是在文本解析器使用安全:對行由行解析一個典型的模式是

std::istream &is; 
for(std::string line; getline(is, line);) 
{ 
    // parse line 
} 
+0

西蒙我喜歡這種模式。在這個例子中,SGI STL鏈接重新創建了沒有線程的錯誤,這讓我很擔心。我每天都不使用太多的多線程技術,但幾年內可能不會這樣。 – John

相關問題