什么是解析文本文件的最佳跨平台方法?

时间:2011-10-31 12:17:59

标签: c++ c string file stream

我想将我的Windows代码移植到本机C ++,并且需要摆脱所有的CLI代码。我发现.NET在解析文本输入方面非常有用,但是当我开始用C ++重写它时,我仍然不会用C fseekchar *来代替String进行编码。在string命名空间中查找C ++有一个std类型我打开了我的STL文档(来自zip存档)并找到"string_discussion.html"开始,“SGI STL中的字符串”并继续描述疏忽可能导致间歇性错误。

std::string安全吗?如果有std与STL的关系是什么? C文件IO 是否危险,C ++流和字符串IO好多了?

1 个答案:

答案 0 :(得分:2)

文档中描述的问题存在于某些编译器中,特别是MSVC,但我从未遇到过现实世界中的实际问题。 GNU编译器实现了所描述的“不可共享”字符串,即使用非const operator[]使字符串不可共享,并在需要时创建副本。

根据定义,STL类不是线程安全的,如果从多个线程访问,则需要被锁包围;我认为这是一个功能,因为它使它们明显更快,并允许实现无锁算法。

std和STL之间的关系基本上是STL已经集成到位于std命名空间的C ++标准库中。该标准从那时起已经发展,但仍然在很大程度上兼容。

通常,它在文本解析器中使用是安全的:逐行解析的典型模式是

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