Ich habe viele Informationen über Rvalue gelesen und lokale Variablen in C++> = 11. Von was ich verstanden habe ist, dass "nur nach Wert, nicht verschieben/vorwärts und nicht & & Methodensignatur und die Compiler wird es für Sie optimieren ".Warum verwendet C++ bei der Rückgabe von local std :: stringstream nicht RVO?
Okay, ich will es geschehen:
#include <sstream>
std::stringstream GetStream() {
std::stringstream s("test");
return s;
}
auto main() -> int {
auto s = GetStream();
}
ich das schöne
error: use of deleted function ‘std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)’
return s;
Fehler. Ich verstehe es nicht, warum es den Kopierkonstruktor versucht? Soll es nicht Move Constructor mit all den schönen Dingen aus C++ 11 hier verwenden? Ich benutze "--std = C++ 14".
Diese kompilieren [ohne Fehler] (http://ideone.com/7aOvLQ). Welchen Compiler benutzen Sie? – Holt
Meine Kristallkugel sagt mir, dass Sie GCC 4.9 verwenden, das keine Bewegungssemantik für 'stringstream' unterstützt. Wenn Sie C++ 14 verwenden möchten, sollten Sie einen Compiler verwenden, der dies unterstützt. –
Ja, Sie sind auf dem richtigen Weg. gcc 4.9.3. –