Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';istringstream、ostringstream和stringstream之间的区别是什么为什么不在所有情况下都使用stringstream?_C++_String_Stringstream_Ostringstream_Istringstream - Fatal编程技术网

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!" );