Por que a inicialização da lista C ++ também leva em consideração os construtores regulares?

No C ++, ao usar a sintaxe initializer_list para inicializar um objeto, os construtores regulares do objeto também participam da resolução de sobrecarga, quando nenhuma outra regra de inicialização da lista se aplica. Pelo que entendi, o código a seguir chama X :: X (int)

class X { int a_; X(int a):a_(a) {} );

void foo() {
   X bar{3};
}

Mas não entendo porque os construtores regulares também são considerados no contexto de initializer_lists. Eu sinto que muitos programadores agora escrevem X {3} para chamar um construtor em vez de X (3) para chamar o construtor. Não gosto desse estilo, pois me faz pensar que o objeto não tem um construtor regular.

Qual é o motivo pelo qual a sintaxe initializer_list também pode ser usada para chamar o construtor regular? Existe um motivo para agora preferir essa sintaxe do que as chamadas regulares do construtor?

questionAnswers(2)

yourAnswerToTheQuestion