Existe uma diferença entre a inicialização de cópia e a inicialização direta?

Suponha que eu tenha essa função:

<code>void my_test()
{
    A a1 = A_factory_func();
    A a2(A_factory_func());

    double b1 = 0.5;
    double b2(0.5);

    A c1;
    A c2 = A();
    A c3(A());
}
</code>

Em cada agrupamento, essas declarações são idênticas? Ou há uma cópia extra (possivelmente otimizável) em algumas das inicializações?

Eu vi pessoas dizerem as duas coisas. Por favorcitar texto como prova. Adicione também outros casos por favor.

questionAnswers(8)

yourAnswerToTheQuestion