istringstream,ostringstream和strings
我什么时候会使用std::istringstream
, std::ostringstream
和std::stringstream
,为什么我不应该在每个场景中使用std::stringstream
(是否存在任何运行时性能问题?)。
最后,这有什么不好的地方(而不是使用流):
std::string stHehe("Hello ");
stHehe += "stackoverflow.com";
stHehe += "!";
就我个人而言,我觉得我非常难得要进入和离开相同的字符串流。
通常我想要从一个字符串初始化一个流,然后解析它; 或将某些东西流式传输到字符串流中,然后提取结果并将其存储起来。
如果您要流入和流出相同的流,则必须非常小心流状态和流位置。
使用' istringstream
或ostringstream
更好地表达您的意图,并为您提供一些针对错误错误的检查,例如意外使用<<
vs >>
。
可能会有一些性能提升,但我不会首先考虑这一点。
你写的东西没有错。 如果你发现它表现不佳,那么你可以描述其他方法,否则坚持最清晰。 就我个人而言,我只是想说:
std::string stHehe( "Hello stackoverflow.com!" );
一个stringstream
比较大,性能可能稍低 - 多重继承可能需要调整vtable指针。 主要的区别是(至少在理论上)更好地表达你的意图,以及防止你不小心使用>>
,你打算<<
(反之亦然)。 OTOH,差别非常小,特别是对于快速演示代码等,我很懒,只是使用stringstream
。 我不太记得上一次我不小心用<<
当我打算>>
,所以对我的安全是位似乎大多是理论(尤其是如果你犯这样的错误,它会几乎总是真的很明显,几乎立即)。
只要使用一个字符串,只要它实现了你想要的就没什么错。 如果你只是把字符串放在一起,这很容易,工作正常。 如果你想格式化其他类型的数据, stringstream
将支持,而字符串大多不会。
在大多数情况下,你不会在同一个std::istringstream
同时需要输入和输出,所以使用std::ostringstream
和std::istringstream
明确地表达了你的意图。 它还可以防止您意外地输入错误的操作符( <<
vs >>
)。
当你需要在同一个流上执行两个操作时,你显然会使用通用版本。
性能问题将成为您最关心的问题,清晰度是主要优势。
最后,使用字符串追加没有任何问题,因为您必须构建纯字符串。 你不能用它来像perl这样的语言结合数字。
链接地址: http://www.djcxy.com/p/20971.html