En anexados para JaredPar respuesta
ctor
1-habitual, segunda función similar a-ctor con el objeto temporal.
compilar este código en algún lugar aquí http://melpon.org/wandbox/ con 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");
}
y verá el resultado.
A partir de ISO/IEC 14882 2003-10-15
8,5, parte 12
su primera, segunda construcción son llamados directo inicialización
12,1, parte 13
Se puede utilizar una conversión de tipo de notación funcional (5.2.3) para crear nuevos objetos de su tipo. [Nota: la sintaxis se parece a una llamada explícita del constructor. ] ... Un objeto creado de esta manera no tiene nombre. [Nota: 12.2 describe la vida útil de los objetos temporales. ] [Nota: llamadas explícitas de constructor no arrojan valores l, véase 3.10. ]
donde leer sobre RVO:
12 funciones miembro especiales/12,8 copia objetos de clase/Parte 15
Cuando se cumplen ciertos criterios, se permite una implementación omitir copia de construcción de un objeto de clase, incluso si el constructor de copia y/o destructor para el objeto tiene efectos secundarios.
apagarlo con la bandera del compilador de comentario para ver dicha copia en el comportamiento)
formar o bien carece de nuevo. –
El segundo formulario utilizará el constructor de copia, por lo que no, no son equivalentes. –
Jugué un poco con eso, la primera forma parece fallar a veces cuando las plantillas se usan con constructores sin parámetros ... – Nils