Argumento predeterminado frente a sobrecargas en C ++

Por ejemplo, en lugar de

void shared_ptr::reset() noexcept;
template <typename Y>
void shared_ptr::reset(Y* ptr);

uno puede pensar en

template <typename Y = T>
void shared_ptr::reset(Y* ptr = nullptr);

Creo que la diferencia de rendimiento es insignificante aquí, y la segunda versión es más concisa. ¿Hay alguna razón específica por la cual el estándar C ++ sea el primero?

losla misma pregunta se le ha pedido el idioma de Kotlin, y allí se prefiere el argumento predeterminado.

Actualizar:

std::unique_ptr::reset() sigue el diseño de argumento predeterminado (veraquí) Entonces creo que la razónstd::shared_ptr::reset() usa sobrecargas porque tienen diferentes especificaciones de excepción.

Respuestas a la pregunta(4)

Su respuesta a la pregunta