2012-03-09 13 views
11

Las referencias Rvalue y la semántica Move son una característica importante de C++ 11 que puede acelerar significativamente el código al reducir las copias innecesarias. El STL se ha actualizado para usar esta nueva característica cuando se utiliza un compilador C++ 11/0x (por ejemplo, gcc 4.6)Qué bibliotecas Boost aprovechan Move Semantics

Boost 1.48 introdujo una nueva biblioteca para emular semánticas de movimiento en compiladores anteriores de C++ 03. Esta biblioteca funciona al introducir macros que se expanden a referencias de valor verdadero cuando el código se compila con compiladores C++ 11 o referencias de valor r emulado cuando el código se compila con compiladores C++ 03.

Aparte de boost::container, ¿se ha actualizado alguna de las otras bibliotecas de impulso para aprovechar la semántica de movimientos?

¿Hay una hoja de ruta que detalle cuándo/si la semántica de movimiento se agregará a otras bibliotecas de impulso?

boost::multi_index_container ha mencionado la adición de la semántica de movimiento en el Boost.MultiIndex Future work, ya que se introdujo en la versión 1.31.

+0

Nota : el nombre "STL" está en desuso y es ambiguo. Use la "biblioteca estándar de C++" en su lugar. – Griwes

Respuesta

8

Como dijo en la pregunta, impulso 1.48 introdujo boost::move, una biblioteca que emula la semántica de movimiento con C++ 03. Esto fue desarrollado por Ion Gaztanaga, quien también (en su mayoría) escribió y actualmente mantiene boost::intrusive y boost::container.

tanto el apoyo de movimiento semántica intrusivos y contenedores - de hecho boost::intrusive tiene que apoyar la semántica movimiento para boost::container, porque boost::container es básicamente un montón de envases no intrusivos implementadas por envolver sus boost::intrusive homólogos. Me parece que intrusivo/contenedor fue la motivación para escribir boost::move, por lo que no es sorprendente que tengan una ventaja en el resto del impulso.

Pero es importante notar aquí que no existe una hoja de ruta o un comité de impulso: impulsar es solo una colección de bibliotecas que comparten distribución, un sitio web y un proceso de revisión/control de calidad. Debe considerar cada biblioteca como un proyecto separado, que solo se actualizará siempre y cuando los autores/encargados del mantenimiento estén interesados ​​en hacer el trabajo (o, por supuesto, cuando les envíe un parche).

The boost 1.48/1.49/1.50/1.51/1.52 release notes son el mejor lugar para buscar respuestas sólidas:

  • Boost.Interprocess cuenta con el apoyo desde 1,45, tanto en C++ y C++ 11 03. Antes 1.48, este contenía el código que se convirtió en boost.move.
  • Boost.Asio tiene soporte desde 1.47; sin emulación en C++ 03
  • Boost.Intrusive obtuvo el apoyo a través de boost.move de 1,48 (11 C++, C++ 03)
  • Boost.Container era nuevo en 1.48 con soporte a través de impulso .Llevar (C++ 11, C++ 03)
  • Boost.Icl obtuvo el apoyo a través de boost.move en 1,49 (C++ 11, C++ 03)
  • Boost.Unordered ganaron apoyo a través de boost.move en 1.49 (C++ 11, con #define para habilitar la emulación en C++ 03)
  • Boost. hilo admite la emulación de C++ 03 w/boost.move desde 1.50, versiones más antiguas tienen C++ 11-único apoyo
  • Boost.Function añade C++ 11-único soporte en 1,52
Cuestiones relacionadas