Обоснование замены функции-члена

В стандартной библиотеке, если тип класса имеет специализированный алгоритм подкачки, он будет иметь функцию-членswap и бесплатная функцияswap это просто переходит к функции-члену. Я не совсем понимаю, почему они оба (и, следовательно, дублирование кода), а не просто свободная функция. Обратите внимание, что когда я говорю «свободная функция», я имею в виду специализированную функцию свободного обмена, а не универсальнуюstd::swap шаблон функции. Такая специализированная функция может иметь привилегированный доступ к соответствующему классу, будучи его другом.

У меня есть два момента, чтобы поддержать просто оставить свободную функцию, а не функцию-член. Во-первых, он формирует более универсальный интерфейс подкачки для облегчения написания универсальных алгоритмов, поскольку не относящиеся к классам типы, такие как массивы, не могут иметь функции-члены. Во-вторых, своп является бинарной операцией, включающей два операнда и демонстрирующей чувство симметрии. Более естественным и интуитивно понятным является выполнение подкачки с использованием бесплатной функции, которая не имеет смещения ни для одного из операндов. По этой причине я всегда чувствовал себя несколько странно при использовании функции-членаswap как будто я выполнял какую-то операцию, основанную на вызывающем объекте.

Ответы на вопрос(1)

Ваш ответ на вопрос