Ich versuche, std::move
in meinen Codes zu verwenden, aber der Compiler (g ++ 4.4), den ich verwende, unterstützt es nicht. Kann boost::move
std::move
komplett ersetzen? Vielen Dank.das Gegenstück von std :: move in Boost-Bibliothek
Antwort
std::move
(und boost::move
wenn C++ 0x Unterstützung aktiviert ist) ist nur ein Cast von T&
zu T&&
. Es bewegt eigentlich nichts. Dies bedeutet, dass der spezifische Typ des Zeigers T&&
vom Compiler unterstützt werden muss. GCC unterstützt R-Wert-Referenzen seit Version 4.3, daher sollte die Boost-Version in Ordnung sein.
Gibt es jedoch einen Grund, warum Sie nicht std::move
von #include <utility>
verwenden können?
http://en.cppreference.com/w/cpp/utility/move
Sie müssen nur sicherstellen, dass -std=c++0x
als Compiler-Option angeben, um die begrenzte C++ 11-Unterstützung zu aktivieren, die 4.4 hat gcc.
In C++ 03 'boost :: move 'ist es ** nicht nur ein Cast **: Deshalb funktioniert es dort. "Boost.Move basiert auf Makros, die in C++ 0x-Compilern und emulierten Rvalue-Referenzklassen und Konvertierungsoperatoren in C++ 03-Compilern auf echte rvalue-Referenzen erweitert werden." Siehe [Boost docs] (http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move/how_the_library_works.html) – nugae
@nugae ja, du hast absolut recht. –
Ja, es kann
Was ist Boost.Move?
Rvalue-Referenzen sind ein wichtiges C++ 0x-Feature, das die Bewegungssemantik für C++ - Werte ermöglicht. Allerdings brauchen wir keine C++ 0x Compiler, um Vorteil der Bewegung Semanatics zu nehmen. Boost.Move emuliert C++ 0x Verschiebungssemantik in C++ 03 Compilern und ermöglicht das Schreiben von portablem Code, der optimal in C++ 03 und C++ 0x Compilern funktioniert.
Quelle: http://www.boost.org/doc/libs/1_59_0_b1/doc/html/move.html
'g ++ 4.4' ist sehr alt. Ziehen Sie in Erwägung, auf die neuere Version zu wechseln – alexeykuzmin0