我想把我的Windows代码移植到本地c++,需要摆脱所有CLI代码。我发现。net在解析文本输入方面非常有帮助,但是当我开始用c++重写它时,我仍然习惯于用fseek
和char *
代替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
}