我想将我的Windows代码移植到本机C ++,并且需要摆脱所有的CLI代码。我发现.NET在解析文本输入方面非常有用,但是当我开始用C ++重写它时,我仍然不会用C fseek
和char *
来代替String
进行编码。在string
命名空间中查找C ++有一个std
类型我打开了我的STL文档(来自zip存档)并找到"string_discussion.html"开始,“SGI STL中的字符串”并继续描述疏忽可能导致间歇性错误。
std::string
安全吗?如果有std
与STL的关系是什么? C文件IO 是否危险,C ++流和字符串IO好多了?
答案 0 :(得分:2)
文档中描述的问题存在于某些编译器中,特别是MSVC,但我从未遇到过现实世界中的实际问题。 GNU编译器实现了所描述的“不可共享”字符串,即使用非const operator[]
使字符串不可共享,并在需要时创建副本。
根据定义,STL类不是线程安全的,如果从多个线程访问,则需要被锁包围;我认为这是一个功能,因为它使它们明显更快,并允许实现无锁算法。
std
和STL之间的关系基本上是STL已经集成到位于std
命名空间的C ++标准库中。该标准从那时起已经发展,但仍然在很大程度上兼容。
通常,它在文本解析器中使用是安全的:逐行解析的典型模式是
std::istream &is;
for(std::string line; getline(is, line);)
{
// parse line
}