In the c++ reference I do not see a std::stringstream
constructor accepting rvalue reference of std::string
. Is there any other helper function to move string to stringstream without an overhead or is there a particular reason behind making such limitation?
Yes, std::string (since C++11) is able to be moved i.e. it supports move semantics.
The classes in <strstream> are deprecated. Consider using the classes in <sstream> instead.
std::move is used to indicate that an object t may be "moved from", i.e. allowing the efficient transfer of resources from t to another object. In particular, std::move produces an xvalue expression that identifies its argument t . It is exactly equivalent to a static_cast to an rvalue reference type.
Absolutely! Make sure that you pass it by reference, not by value.
Since C++20 you can move a string
into a stringstream
: cppreference
Old answer for pre-C++20:
I do not see a
std::stringstream
constructor accepting rvalue reference ofstd::string
That's right. Even the str
setter doesn't utilize move semantics, so moving a string into stringstream
is not supported (not in the current standard, but hopefully in the next one).
You'll be able to move a string into a string-stream in C++20.
Move semantics are supported by the constructor:
std::string myString{ "..." };
std::stringstream myStream{ std::move(myString) };
It can also be done after construction by calling str()
:
std::string myString{ "..." };
std::stringstream myStream;
myStream.str(std::move(myString));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With