Ответ 1
Из документов SGI (здесь):
[1] Строго говоря, iter_swap избыточен. Он существует только по техническим причинам: в некоторых случаях некоторые компиляторы с трудом выполняют вывод типа, необходимый для интерпретации swap (* a, * b).
Мне просто интересно, почему кто-нибудь напишет это:
std::iter_swap(i, k);
вместо этого?
std::swap(*i, *k); // saved a few keystrokes!
Затем я рассмотрел реализацию iter_swap
, и, конечно, он использует swap
вместо std::swap
, так как мы уже находимся в namespace std
. Это приводит меня к следующему вопросу:
Почему кто-нибудь напишет следующее:
using std::swap;
swap(a, b);
вместо этого?
std::iter_swap(&a, &b); // saved an entire line of code!
Существуют ли какие-либо важные различия/проблемы, которые я здесь просматриваю?
Из документов SGI (здесь):
[1] Строго говоря, iter_swap избыточен. Он существует только по техническим причинам: в некоторых случаях некоторые компиляторы с трудом выполняют вывод типа, необходимый для интерпретации swap (* a, * b).
Чтобы ответить на ваш второй вопрос, using
+ swap
позволяет компилятору использовать пользовательские функции свопинга, которые могут быть более эффективными, чем реализация по умолчанию (с помощью ADL). Явно говоря, std::swap
блокирует ADL и любые пользовательские методы подкачки, которые он, возможно, смог найти.
Что касается iter_swap
, то он предположительно там используется в шаблонах и четко указывает на намерение, а не на своп, который может указывать на то, что вы ожидаете указателя.