Por que a inicialização direta da lista com auto é considerada ruim ou não preferida?

Adquiri o hábito de escrever código com a inicialização direta da lista, como abaixo, pois é mais eficaz e é muito útil para evitar implícitosestreitamento:

int i {0};
string s {""};
char c {'a'};
bool b {false};

auto num {100}; // But this??

Mas quando se trata do especificador automático, ouvi dizer que é considerado ruim ou não preferível escrevê-lo assim, por que isso?