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.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen