É inicialização direta ou inicialização de cópia?

A inicialização de objetos (instâncias de classes ou estruturas) em C ++ pode ser feita de várias maneiras. Algumas sintaxes evocam umainicialização direta do seu objeto, outras sintaxes levam a uminicialização de cópia. Comcópia-elisão ativado no compilador, ambos têm desempenho idêntico. Comcópia-elisão desativado, há uma chamada adicional do construtor de copiar / mover a cada instancia quando você escolhe o último (inicialização de cópia).

Conclusão: a inicialização de cópia pode ter uma penalidade de desempenho!

Da seguinte pergunta:C ++ 11 lista inicializador de membros vs inicializador de classe? Eu posso concluir que isso seriainicialização de cópia sintaxe:

obj s = obj("value");

E isso seriainicialização direta sintaxe:

obj s{"value"};

 
Mas e esse:

obj s = {"value"};

E este:

obj s = obj{"value"};

E este:

obj s("value");

Ou este:

obj s = "value";

NOTA
Bjarne Stroustrup compara alguns estilos de inicialização (mas não todos) em seu livro "Programação, princípios e práticas usando C ++", 2ª edição, na página 311, §9.4.2:

struct Date {
    int y,m,d;                     //year, month, day
    Date(int y, int m, int d);     //check for valid date and initialize
    void add_day(int n);           //increase the Date by n days
};

...

Date my_birthday;                   //error: my_birthday not initialized
Date today{12,24,2007};             //oops! run-time error
Date last{2000,12,31};              //OK (colloquial style)
Date next = {2014,2,14};            //also OK (slightly verbose)
Date christmas = Date{1976,12,24};  //also OK (verbose style)

O Sr. Stroustrup apresenta esses diferentes estilos de inicialização como iguais. Pelo menos, é assim que me parece. No entanto, ainda é possível que alguns sejaminicialização direta e outrosinicialização de cópia, uma vez que esses termos ainda não foram discutidos nesse ponto do livro.

EDITAR
As respostas dadas trazem algo interessante.
Aparentemente, isso éinicialização direta:

obj s("value");

E isso éinicialização direta da lista:

obj s{"value"};

Como alguns de vocês apontam, há uma diferença. De que maneira eles realmente diferem? A diferença seria perceptível na saída de um compilador não otimizador?

questionAnswers(3)

yourAnswerToTheQuestion