Sí, para los tipos incorporados int x = 1;
y int x(1);
son lo mismo.
Al construir objetos del tipo de clase, las dos sintaxis de inicialización diferentes son sutilmente diferentes.
Obj x(y);
Ésta es inicialización directa e instruye al compilador para buscar un constructor sin ambigüedades que se lleva a y
, o algo que y
se puede convertir implícitamente, y utiliza este constructor para inicializar x.
Obj x = y;
Ésta es copia de inicialización e instruye al compilador para crear un temporal Obj
convirtiendo y
y utiliza constructor de copia Obj
's para inicializar x
.
Copia initalization es equivalente a inicialización directa cuando el tipo de y
es el mismo que el tipo de x
.
Para copia de la inicialización, porque el temporal utilizado es el resultado de una conversión implícita, los constructores marcados explicit
no se consideran. El constructor de copia para el tipo construido debe ser accesible, pero la compilación puede ser eliminada por el compilador como una optimización.
Dupe: http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-bet-copy-initialization-and-assignment-initializ –
No es exactamente lo mismo. Esta pregunta parece ser específicamente sobre la inicialización de POD. – Boojum