2016-08-04 9 views

Antwort

11

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.

+3

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

+0

@nugae ja, du hast absolut recht. –

8

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

Verwandte Themen