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
- 1. Returning std :: move (f) in std :: for_each
- 2. Mischen std :: move() und std :: Thread
- 3. Sind std :: move und std :: copy identisch?
- 4. std :: vector :: emplace_back und std :: move
- 5. move constructor für std :: runtime_error
- 6. Ist `std :: move 'hier notwendig?
- 7. Gegenstück von __getattr__
- 8. Warum benötigt dies eine explizite std :: move?
- 9. fehlgeschlagen C++ Primer über std :: move()
- 10. Kopie vs Std :: move für Ints
- 11. Ausführen einiger Operationen auf Std :: move (x)
- 12. Warum elision nicht mit std :: move arbeiten?
- 13. Ist `x = std :: move (x)` undefiniert?
- 14. Gibt es eine Möglichkeit zu std :: move std :: string in std :: stringstream
- 15. Warum ist `pandas.read_csv` nicht das Gegenstück von` pandas.DataFrame.to_csv`?
- 16. Was ist das Gegenstück von theano zu numpy apply_along_axis?
- 17. Was ist das beste .Net Gegenstück von Google Web Toolkit?
- 18. Muss ich std :: move in meinen Kernel portieren?
- 19. Soll ich std :: einen shared_ptr in einen Move-Konstruktor verschieben?
- 20. Wie erzwinge std :: sort, um move constructor und move-assignment zu verwenden?
- 21. Was ist das Gegenstück für gl_TexCoord in OpenGL ES 2.0
- 22. Warum verursacht gelöschte move-Semantik Probleme mit std :: vector?
- 23. Löschen Mitglied der Struktur auf Heap nach Std :: move()
- 24. Konstruktor verschieben, Vektor mit std :: move zwischen zwei Objekten verschieben
- 25. Warum muss ich std :: move auf einem temporären dynamic_bitset aufrufen?
- 26. Java-Config Gegenstück von wss: verbindlich?
- 27. Wird eine r-Wert-Referenzvariable mit std :: move() verwendet? [C++]
- 28. Thread sicher unique_ptr move
- 29. std :: move auf eine Variable, die bereits T &&
- 30. Warum ruft das den Kopierkonstruktor auf, nicht den Move-Konstruktor?
'g ++ 4.4' ist sehr alt. Ziehen Sie in Erwägung, auf die neuere Version zu wechseln – alexeykuzmin0