什么是最好的,交叉平台,解析文本文件的方式?

问题描述:

我想将我的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++中完全不相关,所以如果您知道标准库的基础知识,那么您会更好。 –

在文档中描述的问题存在于一些编译器,特别是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