Argumento padrão vs sobrecargas em C ++
Por exemplo, em vez de
void shared_ptr::reset() noexcept;
template <typename Y>
void shared_ptr::reset(Y* ptr);
alguém pode pensar em
template <typename Y = T>
void shared_ptr::reset(Y* ptr = nullptr);
Eu acho que a diferença de desempenho é insignificante aqui, e a segunda versão é mais concisa. Existe alguma razão específica para o padrão C ++ seguir o primeiro caminho?
omesma questão foi solicitado o idioma Kotlin e o argumento padrão é o preferido.
Atualizar:
std::unique_ptr::reset()
segue o design do argumento padrão (consulteaqui) Então eu acho que a razãostd::shared_ptr::reset()
usa sobrecargas é porque eles têm especificações de exceção diferentes.