Em anexo a JaredPar resposta
1-Ctor usual, 2-Função-como-Ctor com objeto temporário.
Compile esta fonte em algum lugar aqui http://melpon.org/wandbox/ com diferentes compiladores
// turn off rvo for clang, gcc with '-fno-elide-constructors'
#include <stdio.h>
class Thing {
public:
Thing(const char*){puts(__FUNCTION__ );}
Thing(const Thing&){puts(__FUNCTION__ );}
~Thing(){puts(__FUNCTION__);}
};
int main(int /*argc*/, const char** /*argv*/) {
Thing myThing = Thing("asdf");
}
E você verá o resultado.
ISO / IEC 14882 2003-10-15
8.5, parte 12
Sua primeira e segunda construção são chamadas de inicialização direta
12.1, parte 13
Uma conversão de tipo de notação funcional (5.2.3) pode ser usada para criar novos objetos desse tipo. [Nota: A sintaxe se parece com uma chamada explícita do construtor. ] ... Um objeto criado dessa maneira não tem nome. [Nota: 12.2 descreve a vida útil dos objetos temporários. ] [Nota: chamadas explícitas ao construtor não produzem valores l, consulte 3.10. ]
Onde ler sobre o RVO:
12 Funções de membro especiais / 12.8 Copiando objetos de classe / Parte 15
Quando certos critérios são atendidos, uma implementação pode omitir a construção de cópia de um objeto de classe, mesmo se o construtor e / ou destruidor de cópia do objeto tiver efeitos colaterais .
Desative-o com o sinalizador do compilador do comentário para visualizar esse comportamento de cópia)