What's the difference between istringstream, o

2019-01-10 02:49发布

When would I use std::istringstream, std::ostringstream and std::stringstream and why shouldn't I just use std::stringstream in every scenario (are there any runtime performance issues?).

Lastly, is there anything bad about this (instead of using a stream at all):

std::string stHehe("Hello ");

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

7条回答
一纸荒年 Trace。
2楼-- · 2019-01-10 03:11

Presumably when only insertion or only extraction is appropriate for your operation you could use one of the 'i' or 'o' prefixed versions to exclude the unwanted operation.

If that is not important then you can use the i/o version.

The string concatenation you're showing is perfectly valid. Although concatenation using stringstream is possible that is not the most useful feature of stringstreams, which is to be able to insert and extract POD and abstract data types.

查看更多
太酷不给撩
3楼-- · 2019-01-10 03:13

Why open a file for read/write access if you only need to read from it, for example?

What if multiple processes needed to read from the same file?

查看更多
Viruses.
4楼-- · 2019-01-10 03:24

A stringstream is somewhat larger, and might have slightly lower performance -- multiple inheritance can require an adjustment to the vtable pointer. The main difference is (at least in theory) better expressing your intent, and preventing you from accidentally using >> where you intended << (or vice versa). OTOH, the difference is sufficiently small that especially for quick bits of demonstration code and such, I'm lazy and just use stringstream. I can't quite remember the last time I accidentally used << when I intended >>, so to me that bit of safety seems mostly theoretical (especially since if you do make such a mistake, it'll almost always be really obvious almost immediately).

Nothing at all wrong with just using a string, as long as it accomplishes what you want. If you're just putting strings together, it's easy and works fine. If you want to format other kinds of data though, a stringstream will support that, and a string mostly won't.

查看更多
Lonely孤独者°
5楼-- · 2019-01-10 03:24

In most cases, you won't find yourself needing both input and output on the same stringstream, so using std::ostringstream and std::istringstream explicitly makes your intention clear. It also prevents you from accidentally typing the wrong operator (<< vs >>).

When you need to do both operations on the same stream you would obviously use the general purpose version.

Performance issues would be the least of your concerns here, clarity is the main advantage.

Finally there's nothing wrong with using string append as you have to construct pure strings. You just can't use that to combine numbers like you can in languages such as perl.

查看更多
We Are One
6楼-- · 2019-01-10 03:25

To answer your third question: No, that's perfectly reasonable. The advantage of using streams is that you can enter any sort of value that's got an operator<< defined, while you can only add strings (either C++ or C) to a std::string.

查看更多
相关推荐>>
7楼-- · 2019-01-10 03:31

istringstream is for input, ostringstream for output. stringstream is input and output. You can use stringstream pretty much everywhere. However, if you give your object to another user, and it uses operator >> whereas you where waiting a write only object, you will not be happy ;-)

PS: nothing bad about it, just performance issues.

查看更多
登录 后发表回答