Warum ruft return aus einer Funktion keine Move-Semantik in C++11 auf? Problem mit Rvalue-Referenzen
Hallo! Ich habe angefangen, mich mit C++11 und Move-Semantik zu beschäftigen, und habe ein Problem. Ich habe eine einfache Funktion geschrieben, die einen Vektor erstellt und zurückgibt:\n\n```cpp\n#include \n#include \n\nstd::vector createVector() {\n std::vector v = {1, 2, 3, 4, 5};\n return v; // Ich hoffe hier auf move\n}\n\nint main() {\n std::vector result = createVector();\n std::cout << "Size: " << result.size() << std::endl;\n return 0;\n}\n```\n\nIch habe erwartet, dass bei return der move-constructor aufgerufen wird, um das Kopieren zu vermeiden. Aber wenn ich über rvalue-Referenzen und move-Semantik lese, sagen viele, dass der Compiler selbst entscheidet, was zu tun ist. Ich habe versucht, explizit std::move zu verwenden:\n\n```cpp\nreturn std::move(v);\n```\n\nAber einige sagen, dass dies die Leistung sogar verschlechtern kann.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen