我什么时候可以使用std::istringstream、std::ostringstream和std::stringstream,为什么我不应该在每个场景中都使用std::stringstream (有什么运行时性能问题吗?)
最后,这有什么不好的地方(而不是使用流):
std::string stHehe("Hello ");
stHehe += "stackoverflow.com";
stHehe += "!";发布于 2010-07-21 00:25:40
就我个人而言,我发现我很少想要执行流入和流出同一字符串流的操作。
通常,我希望从字符串初始化流,然后解析它;或者将事物流到字符串流,然后提取结果并存储它。
如果您正在与同一个流进行流式传输,则必须非常小心地处理流状态和流位置。
使用“just”istringstream或ostringstream更好地表达了你的意图,并让你可以检查一些愚蠢的错误,比如意外使用<<和>>。
可能会有一些性能改进,但我不会首先考虑这一点。
你写的东西没有错。如果你发现它的性能不够好,那么你可以分析其他方法,否则坚持使用最清晰的方法。就我个人而言,我只会说:
std::string stHehe( "Hello stackoverflow.com!" );发布于 2010-07-21 00:27:11
stringstream稍大,性能可能稍低--多重继承可能需要对vtable指针进行调整。主要的区别是(至少在理论上)更好地表达了你的意图,并防止你在你想要<<的地方意外地使用了>> (反之亦然)。OTOH,差别非常小,特别是对于演示代码之类的,我很懒,只使用stringstream。我不太记得上一次我无意中使用<<是什么时候了,我打算使用>>,所以对我来说,这种安全性似乎大多是理论上的(特别是因为如果你真的犯了这样的错误,几乎总是马上就会很明显)。
只使用字符串没有任何问题,只要它完成了您想要的。如果你只是把字符串放在一起,这很容易,而且工作得很好。但是,如果您想格式化其他类型的数据,stringstream将支持该格式,而string通常不支持。
发布于 2010-07-21 00:29:57
在大多数情况下,您不会发现自己需要在同一个字符串流上同时输入和输出,因此使用std::ostringstream和std::istringstream明确地表明了您的意图。它还可以防止您意外地键入错误的运算符(<<与>>)。
当您需要在同一个流上执行这两个操作时,您显然会使用通用版本。
在这里,性能问题是您最不关心的问题,清晰度是主要优势。
最后,使用string append没有错,因为您必须构造纯字符串。您不能像在perl这样的语言中那样使用它来组合数字。
https://stackoverflow.com/questions/3292107
复制相似问题