Почему std:: swap переместился в <utility>?
Почему std::swap
был перемещен в заголовок <utility>
для С++ 11?
N3290 C.2.7 говорит:
17.6.3.2
Эффект на оригинальную функцию: обмен функцией перемещен в другой заголовок
Обоснование: Удалить зависимость для <algorithm>
для свопа.
Влияние на исходную функцию: допустимый код С++ 2003, который был скомпилирован, ожидая, что swap будет находиться в <algorithm>
, возможно, должен включать <utility>
.
Я не могу понять часть, выделенную жирным шрифтом. О какой зависимости говорят и почему?
Ответы
Ответ 1
Комитет хотел разрешить использовать swap()
без введения зависимости времени компиляции от большого и сложного заголовочного файла <algorithm>
. Поскольку swap()
настолько широко используется, имеет смысл позволить вам потянуть его определение с минимальным дополнительным багажом; это, как правило, приводит к более быстрому времени компиляции файлов, которые в противном случае не нуждаются <algorithm>
. Его новый дом позволяет использовать его, не вводя ненужные накладные расходы.