Какие библиотеки повышения используют преимущества семантики перемещения - PullRequest
12 голосов
/ 10 марта 2012

Rvalue ссылки и семантика перемещения - это основная функция C ++ 11, которая может значительно ускорить код за счет сокращения ненужных копий.STL был обновлен для использования этой новой функции, когда используется компилятор c ++ 11 / 0x (например, gcc 4.6)

В Boost 1.48 введена новая библиотека для эмуляции семантики перемещения в более старом C ++ 03компиляторы.Эта библиотека работает за счет введения макросов, которые расширяются до истинных значений rvalue, когда код компилируется компиляторами C ++ 11, или эмулируемых ссылок rvalue, когда код компилируется компиляторами C ++ 03.

Помимо boost::containerкакие-нибудь другие библиотеки бустов были обновлены, чтобы использовать преимущества семантики перемещения?

Есть ли план, детализирующий, когда / если семантика перемещения будет добавлена ​​к другим библиотекам буста?

boost::multi_index_container имеетупоминалось добавление семантики перемещения в Boost.MultiIndex Future work , поскольку оно было представлено в версии 1.31.

1 Ответ

9 голосов
/ 10 марта 2012

Как вы сказали в этом вопросе, в Boost 1.48 появилась boost::move, библиотека, которая эмулирует семантику перемещения с C ++ 03. Это было разработано Ионом Гастанага, который также (в основном) написал и в настоящее время поддерживает boost::intrusive и boost::container.

И навязчивая, и контейнерная поддержка перемещают семантику - на самом деле boost::intrusive должна поддерживать семантику перемещения для boost::container to, потому что boost::container - это, по сути, группа неинтрузивных контейнеров, реализованных путем упаковки их boost::intrusive аналогов. Мне кажется, что навязчивость / контейнер были мотивом для написания boost::move, поэтому неудивительно, что у них есть преимущество перед остальными бустами.

Но важно отметить, что здесь нет дорожной карты или комитета повышения - повышение - это просто набор библиотек, которые совместно используют распространение, веб-сайт и процесс проверки / контроля качества. Вы должны рассматривать каждую библиотеку как отдельный проект, который будет обновляться только в том случае, если авторы / сопровождающие заинтересованы в выполнении работы (или, конечно, когда вы отправите им патч!).

Повышение 1.48 / 1.49 / 1.50 / 1.51 / 1.52 Примечания к выпуску - лучшее место искать твердые ответы:

  • Boost.Interprocess поддерживается с 1.45, как C ++ 11, так и C ++ 03. До 1.48 он содержал код, который стал boost.move.
  • Boost.Asio поддерживается с 1.47; нет эмуляции в C ++ 03
  • Boost.Intrusive получил поддержку через boost.move в 1,48 (C ++ 11, C ++ 03)
  • Boost.Container был новым в 1.48 с поддержкой через boost.move (C ++ 11, C ++ 03)
  • Boost.Icl получил поддержку через boost.move в 1.49 (C ++ 11, C ++ 03)
  • Boost.Unordered получил поддержку через boost.move в 1.49 (C ++ 11, с #define для включения эмуляции в C ++ 03)
  • Boost.Thread поддерживает эмуляцию C ++ 03 с boost.move начиная с версии 1.50, более старые версии поддерживают только C ++ 11
  • Boost.Function добавлена ​​поддержка C ++ 11-only в 1,52
...