Stringstream verschieben oder tauschen
Ich möchte einen Stringstream verschieben. In der realen Welt habe ich ein Stringstream-Klassen-Datenelement, das ich während des Betriebs für verschiedene Strings wiederverwenden möchte.
stringstream hat keine Kopierzuweisung oder keinen Kopierkonstruktor, was Sinn macht. Laut cppreference.com und cplusplus.com sollte für std :: stringstream jedoch eine Move-Zuweisung und eine Swap-Operation definiert sein. Ich habe beide ausprobiert und beide scheitern.
Zuweisung verschieben#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream
int main () {
std::stringstream stream("1234");
//stream = std::move(std::stringstream("5678"));
stream.operator=(std::move(std::stringstream("5678")));
//stream.operator=(std::stringstream("5678"));
return 0;
}
Quelle:http: //ideone.com/Izyan
prog.cpp:11:56: error: use of deleted function ‘std::basic_stringstream<char>& std::basic_stringstream<char>::operator=(const std::basic_stringstream<char>&)’
stream.operator=(std::move(std::stringstream("5678")));
Der Compiler gibt an, dass für alle drei Anweisungen keine Kopienzuweisung vorhanden ist, was zutrifft. Ich verstehe jedoch nicht, warum die Move-Zuweisung nicht verwendet wird, zumal std :: move eine R-Wert-Referenz zurückgeben soll. Stringstream sollte eine Move-Zuweisung haben, wie hier gezeigt:http: //en.cppreference.com/w/cpp/io/basic_stringstream/operator%3
PS: Ich arbeite mit c ++ 11, daher sind rvalue-Referenzen Teil der 'Welt'.
TauscheDies fand ich wirklich seltsam, ich habe Beispielcode von cplusplus.com kopiert und es ist fehlgeschlagen:
// swapping stringstream objects
#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream
int main () {
std::stringstream foo;
std::stringstream bar;
foo << 100;
bar << 200;
foo.swap(bar);
int val;
foo >> val; std::cout << "foo: " << val << '\n';
bar >> val; std::cout << "bar: " << val << '\n';
return 0;
}
Quelle:http: //ideone.com/NI0xM cplusplus.com Quelle:http: //www.cplusplus.com/reference/sstream/stringstream/swap
prog.cpp: In function ‘int main()’:
prog.cpp:14:7: error: ‘std::stringstream’ has no member named ‘swap’
foo.swap(bar);
Was vermisse ich? Warum kann ich einen Stringstream nicht verschieben oder tauschen? Wie soll ich einen Stringstream tauschen oder verschieben?