解析文本文件最好的、跨平台的方法是什么?
What is the best, cross platfrom, way to parse a text file?
我想把我的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
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 在转换为较小的数值类型之前执行范围检查的安全、跨平台方法是什么
- 将XOJO用于跨平台开发的妥协是什么?
- 抽象跨平台实现的常见习语是什么
- c++:跨平台且安全的系统(…)的替代方案是什么?
- 解析文本文件最好的、跨平台的方法是什么?
- 在C++中执行跨平台线程间通知的好方法是什么?
- 跨平台发送大量数据的好方法是什么?
- 目前在跨平台C和c++ api中使用字符串的最佳实践是什么?
- WPF到跨平台开发,最强大的跨平台UI框架是什么?
- 跨平台字符串类实现良好的模型可移植性"Best Practices"是什么?
- 跨平台-从c++运行GLSL着色器(尚未编译)的最简单方法是什么?