C ++: lista de constructor versus inicializador en struct/clase
-
21-09-2019 - |
Pregunta
Un objeto de una estructura/clase (que no tiene constructor) se puede crear usando un lista de inicializador. ¿Por qué no se permite esto en estructura/clase con constructor?
struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
Solución
No, un objeto con un constructor ya no se considera un POD (datos antiguos simples). Los objetos solo deben contener otros tipos de POD como miembros no estáticos (incluidos los tipos básicos). Una cápsula puede tener funciones estáticas y miembros de datos complejos estáticos.
Tenga en cuenta que el próximo estándar C ++ le permitirá definir listas de inicializador, lo que permitirá que los objetos no POD se inicialicen con los aparatos ortopédicos.
Otros consejos
Si por su pregunta, quiere decir: "¿Puedo hacer esto?"
struct MyGizmo
{
char things_[5];
MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};
...Entonces la respuesta es no. C ++ no permite esto.