istringstream,ostringstream和stringstream有什么区别?/为什么不在每种情况下使用stringstream?

Oli*_*aur 150 c++ string stringstream ostringstream istringstream

当我会用std::istringstream,std::ostringstream以及std::stringstream为什么不应该我只是用std::stringstream在所有情况(是否有任何的运行时性能问题?).

最后,这有什么不好的(而不是使用流):

std::string stHehe("Hello ");

stHehe += "stackoverflow.com";
stHehe += "!";
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 110

就个人而言,我发现很少有人想要在同一个字符串流中执行流式传输.

通常我想要从字符串初始化一个流然后解析它; 或将事物流式传输到字符串流,然后提取结果并存储它.

如果您要在同一个流中进行流式传输,则必须非常小心流状态和流位置.

使用"只是" istringstreamostringstream更好的表达你的意图,让您对愚蠢的错误,如意外使用的一些检查<<VS >>.

可能会有一些性能改进,但我不会在第一次看.

你写的东西没什么不对.如果你发现它表现不佳,那么你可以描述其他方法,否则坚持最清楚的方法.就个人而言,我只想:

std::string stHehe( "Hello stackoverflow.com!" );
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 20

A stringstream稍微大些,性能可能略低 - 多重继承可能需要调整vtable指针.主要区别是(至少在理论上)更好地表达您的意图,并防止您意外地使用>>您想要的地方<<(反之亦然).OTOH,差异足够小,特别是对于快速的演示代码等等,我很懒,只是使用stringstream.我不太记得上一次我不小心用<<的时候我意>>,所以我安全的该位似乎大多是理论(尤其是因为如果你这样做犯这样的错误,它会几乎总是真的很明显几乎立即).

只要它完成你想要的东西,只使用一个字符串没有任何错误.如果你只是将字符串放在一起,它很容易并且工作正常.如果你想格式化其他类型的数据,a stringstream会支持它,而字符串通常不支持.


Mar*_*k B 15

在大多数情况下,您不会发现自己需要在同一个字符串流上同时输入和输出,因此使用std::ostringstreamstd::istringstream明确表达您的意图.它还可以防止您意外键入错误的运算符(<<vs >>).

当您需要在同一个流上执行这两个操作时,您显然会使用通用版本.

性能问题是您最关注的问题,清晰度是主要优势.

最后使用字符串append没有任何问题,因为你必须构造纯字符串.你不能用它来组合像perl这样的语言中的数字.


Sch*_*ron 7

istringstream用于输入,ostringstream用于输出。stringstream是输入和输出。您几乎可以在任何地方使用stringstream。但是,如果将对象提供给另一个用户,并且使用运算符>>,而在等待只写对象的对象,您将不会满意;-)

PS:没什么不好的,只是性能问题。