C++ 什么';istringstream、ostringstream和stringstream之间的区别是什么为什么不在所有情况下都使用stringstream?
我什么时候会使用C++ 什么';istringstream、ostringstream和stringstream之间的区别是什么为什么不在所有情况下都使用stringstream?,c++,string,stringstream,ostringstream,istringstream,C++,String,Stringstream,Ostringstream,Istringstream,我什么时候会使用std::istringstream、std::ostringstream和std::stringstream,为什么不在每个场景中都使用std::stringstream(是否存在运行时性能问题?) 最后,这有什么不好的地方吗(根本不用流): 就我个人而言,我发现我很少希望执行流到和流出同一个字符串流 通常我想从一个字符串初始化一个流,然后解析它;或者将内容流式处理为字符串流,然后提取结果并存储 如果在同一个流之间进行流传输,则必须非常小心流状态和流位置 使用'just'ist
std::istringstream
、std::ostringstream
和std::stringstream
,为什么不在每个场景中都使用std::stringstream
(是否存在运行时性能问题?)
最后,这有什么不好的地方吗(根本不用流):
就我个人而言,我发现我很少希望执行流到和流出同一个字符串流 通常我想从一个字符串初始化一个流,然后解析它;或者将内容流式处理为字符串流,然后提取结果并存储 如果在同一个流之间进行流传输,则必须非常小心流状态和流位置 使用'just'
istringstream
或ostringstream
可以更好地表达您的意图,并让您检查一些愚蠢的错误,例如意外使用
可能会有一些性能改进,但我不会首先考虑这一点
你所写的没有错。如果您发现它的性能不够好,那么您可以分析其他方法,否则请坚持使用最清晰的方法。就我个人而言,我只想:
std::string stHehe( "Hello stackoverflow.com!" );
istringstream用于输入,ostringstream用于输出。stringstream是输入和输出。 您几乎可以在任何地方使用stringstream。 但是,如果您将对象交给另一个用户,并且它使用运算符>>而您正在等待一个只写对象,您将不会高兴;-) 附言:
没有什么不好的,只是性能问题。A
stringstream
稍大一些,性能可能稍低——多重继承可能需要调整vtable指针。主要区别在于(至少在理论上)更好地表达您的意图,并防止您意外地在您想要的地方使用>
,例如,如果您只需要读取文件,为什么要打开文件进行读/写访问
如果多个进程需要从同一个文件中读取,该怎么办?回答您的第三个问题:不,这是完全合理的。使用streams的优点是,您可以输入带有运算符的任何类型的值,假设只有插入或提取适合您的操作,您可以使用带有“i”或“o”前缀的版本之一来排除不需要的操作
如果这不重要,那么您可以使用i/o版本
您显示的字符串连接是完全有效的。虽然可以使用stringstream进行连接,但这并不是stringstreams最有用的功能,它能够插入和提取POD和抽象数据类型。在大多数情况下,您不会发现自己需要在同一个stringstream上同时输入和输出,因此,使用std::ostringstream
和std::istringstream
可以明确表达您的意图。它还可以防止您意外键入错误的运算符(
)
当您需要在同一个流上执行这两个操作时,您显然会使用通用版本
性能问题是您最不关心的问题,清晰性是主要优势
最后,使用字符串附加并没有什么错,因为您必须构造纯字符串。您不能像在perl等语言中那样使用它来组合数字。std::ostringstream::str()创建流内容的副本,这在某些情况下会使内存使用量翻倍。您可以使用std::stringstream及其rdbuf()函数来避免这种情况
详情如下:
std::string stHehe( "Hello stackoverflow.com!" );