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

What is the best, cross platfrom, way to parse a text file?

本文关键字:跨平台 是什么 方法 文本 文件      更新时间:2023-10-16

我想把我的Windows代码移植到本地c++,需要摆脱所有CLI代码。我发现。net在解析文本输入方面非常有帮助,但是当我开始用c++重写它时,我仍然习惯于用fseekchar *代替String在C中编码。发现c++在std命名空间中有string类型,我打开我的STL文档(从zip存档),发现"string_discussion.html"开始,"SGI STL中的字符串",并继续描述可能导致间歇性错误的疏忽。

std::string安全吗?std和STL有什么关系?C文件IO 危险,而c++流和字符串IO好多了吗?

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

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

std和STL之间的关系基本上是STL已经集成到std命名空间中的c++标准库中。自那以后,该标准不断发展,但基本保持兼容。

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

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