Функция шаблона<boost::swap>позволяет менять значения двух переменных, используя поиск, зависящий от аргумента, чтобы выбрать специализированную функцию свопа, если она доступна. При отсутствии специализированной функции свопа используется<std::swap>.
Общая функция<std::swap>требует, чтобы элементы, подлежащие замене, были присваиваемыми и копируемыми. Обычно она реализуется с помощью одной копировальной конструкции и двух заданий — это часто и излишне ограничительно, и излишне медленно. Кроме того, если общая реализация свопа обеспечивает только базовую гарантию, специализированные функции свопа часто могут обеспечить гарантию исключения без броска (и считается наилучшей практикой делать это там, где это возможно<boost::swap>).
Альтернативой использованию поиска, основанного на аргументах, в этой ситуации является предоставление шаблонной специализации<std::swap>для каждого типа, который требует специализированного обмена. Хотя это законный C++, ни одна библиотека Boost не использует этот метод, в то время как многие библиотеки Boost предоставляют специализированные функции обмена в своих собственных пространствах имен.
<boost::swap>также поддерживает замену встроенных массивов. Обратите внимание, что<std::swap>изначально не делал этого, но запрос на добавление перегрузки<std::swap>для встроенных массивов был принят C++. Комитет по стандартам<std::swap>.
<boost::swap>обеспечивает ту же гарантию исключения, что и базовая используемая функция свопа, за одним исключением; для массива типа<T[n]>, где<n>1>и базовая функция свопа для<T>обеспечивают сильную гарантию исключения,<boost::swap>обеспечивает только базовую гарантию исключения.
Несколько старых компиляторов не поддерживают поиск, зависящий от аргументов. На этих компиляторах<boost::swap>будет вызывать<std::swap>, игнорируя любые специализированные функции свопа, которые могут быть найдены в результате поиска, зависящего от аргумента.
Нильс Деккер— для реализации и документирования поддержки встроенных массивов
Иосиф Гаутерин— для первоначальной идеи, реализации, испытаний и документации
Стивен Ватанабе— за идею сделать<boost::swap>менее специализированной, чем<std::swap>, тем самым позволив функции иметь название «swap» без введения двусмысленности
<boost::swap>Скотт Мейерс, Эффективный C++ Третье издание, пункт 25: "Подумайте о поддержке замены без броска".
Статья swap раздела Chapter 1. Boost.Core Chapter 1. Boost.Core может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.