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'.

Tausche

Dies 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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage