ich std::for_each
hier http://en.cppreference.com/w/cpp/algorithm/for_each in die Dokumentation lese und sah, dass der Rückgabewert std::move(f)
istWarum for_each Funktion zurückkehren, indem Sie bewegen
Warum der Standard der Eingangsparameter im Rückgabewert bewegt erzwingt? Wird es sowieso nicht standardmäßig verschoben, da der Eingabeparameter als Wert übergeben wird?
Dies führt mich zu einem paar followups, wenn Sie kompilieren den folgenden Code
Something function(Something something) {
return something;
}
Die return-Anweisung ist ein Schritt auf meinem System mit der höchsten Optimierungsstufe (
-O3
), Warum geben die meisten Compiler diesen Rückgabewert nicht an? Lokale Werte sind nicht vorhanden, aber Funktionsargumente sind nicht vorhanden.Erzwingt C++ 17 Elision in diesem Fall? Ich lese den Vorschlag (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html), aber ich verstehe nicht vollständig, welche Fälle für die obligatorische Elision qualifizieren.
Ich habe schon versucht, diese auf Apple LLVM version 8.0.0 (clang-800.0.42.1)
auf meinem Mac und auf g++ 5.4
auf Ubuntu 16.04.
Warum sagen Sie, dass es nicht legal ist, die Rückgabe von einem Funktionsparameter zu verhindern? Die Art, wie ich es sehe, Funktionsparameter sind die gleichen wie lokale Variablen, außer dass die Reihenfolge der Konstruktion und der Zerstörung nicht spezifiziert ist. – Curious
@Curious: Mit einem Zitat aus C++ 17 aktualisiert, um dies zu adressieren. –
Eine letzte Sache. Warum hat der Vorschlag Elision von Funktionsargumenten ausgeschlossen? Ich versuche nur die Gründe für die Entscheidung zu verstehen. – Curious