Например, вместо
void shared_ptr::reset() noexcept;
template <typename Y>
void shared_ptr::reset(Y* ptr);
можно подумать
template <typename Y = T>
void shared_ptr::reset(Y* ptr = nullptr);
Я думаю, что разница в производительности здесь незначительна, а вторая версия более кратка. Есть ли какая-то конкретная причина, по которой стандарт C++ идет первым путем?
Тот же вопрос задан для языка Kotlin, и аргумент по умолчанию предпочтительнее.
Обновить:
std::unique_ptr::reset()
следует за конструкцией аргументов по умолчанию (см. здесь). Поэтому я думаю, что причина, по которой std::shared_ptr::reset()
использует перегрузки, состоит в том, что они имеют разные спецификации исключений.