istringstream,ostringstream和strings

我什么时候会使用std::istringstreamstd::ostringstreamstd::stringstream ,为什么我不应该在每个场景中使用std::stringstream (是否存在任何运行时性能问题?)。

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

std::string stHehe("Hello ");

stHehe += "stackoverflow.com";
stHehe += "!";

就我个人而言,我觉得我非常难得要进入和离开相同的字符串流。

通常我想要从一个字符串初始化一个流,然后解析它; 或将某些东西流式传输到字符串流中,然后提取结果并将其存储起来。

如果您要流入和流出相同的流,则必须非常小心流状态和流位置。

使用' istringstreamostringstream更好地表达您的意图,并为您提供一些针对错误错误的检查,例如意外使用<< vs >>

可能会有一些性能提升,但我不会首先考虑这一点。

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

std::string stHehe( "Hello stackoverflow.com!" );

一个stringstream比较大,性能可能稍低 - 多重继承可能需要调整vtable指针。 主要的区别是(至少在理论上)更好地表达你的意图,以及防止你不小心使用>> ,你打算<< (反之亦然)。 OTOH,差别非常小,特别是对于快速演示代码等,我很懒,只是使用stringstream 。 我不太记得上一次我不小心用<<当我打算>> ,所以对我的安全是位似乎大多是理论(尤其是如果你犯这样的错误,它会几乎总是真的很明显,几乎立即)。

只要使用一个字符串,只要它实现了你想要的就没什么错。 如果你只是把字符串放在一起,这很容易,工作正常。 如果你想格式化其他类型的数据, stringstream将支持,而字符串大多不会。


在大多数情况下,你不会在同一个std::istringstream同时需要输入和输出,所以使用std::ostringstreamstd::istringstream明确地表达了你的意图。 它还可以防止您意外地输入错误的操作符( << vs >> )。

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

性能问题将成为您最关心的问题,清晰度是主要优势。

最后,使用字符串追加没有任何问题,因为您必须构建纯字符串。 你不能用它来像perl这样的语言结合数字。

链接地址: http://www.djcxy.com/p/20971.html

上一篇: What's the difference between istringstream, ostringstream and stringstream? / Why not use stringstream in every case?

下一篇: itoa function problem