Avatar ·

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: ```cpp #include #include std::vector createVector() { std::vector v = {1, 2, 3, 4, 5}; return v; // Ich hoffe hier auf move } int main() { std::vector result = createVector(); std::cout << "Size: " << result.size() << std::endl; return 0; } ``` Ich habe erwartet, dass bei return der move-Konstruktor 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: ```cpp return std::move(v); ``` Aber einige sagen, dass dies die Leistung sogar verschlechtern kann.