Inicialización de estructura C ++ [duplicado]
¿Es posible inicializar estructuras en C++ como se indica a continuación?
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
address temp_address = { .city = "Hamilton", .prov = "Ontario" };
Los enlaces aquí y aquí mencionan que es posible utilizar este estilo sólo en C. Si es así, ¿por qué no es posible en C++? ¿Existe alguna razón técnica subyacente por la que no se implementa en C++ o es una mala práctica utilizar este estilo? Me gusta usar esta forma de inicialización porque mi estructura es grande y este estilo me brinda una legibilidad clara de qué valor se asigna a cada miembro.
Comparta conmigo si hay otras formas de lograr la misma legibilidad.
He hecho referencia a los siguientes enlaces antes de publicar esta pregunta:
- C/C++ para AIX
- Inicialización de estructura C con variable
- Inicialización de estructura estática con etiquetas en C++
- Inicialización adecuada de la estructura de C ++ 11
Si desea dejar claro cuál es cada valor de inicializador, simplemente divídalo en varias líneas, con un comentario en cada una:
address temp_addres = {
0, // street_no
nullptr, // street_name
"Hamilton", // city
"Ontario", // prov
nullptr, // postal_code
};
Después de que mi pregunta no arrojara un resultado satisfactorio (porque C++ no implementa el inicio basado en etiquetas para las estructuras), tomé el truco que encontré aquí: ¿ Los miembros de una estructura de C++ se inicializan en 0 de forma predeterminada?
Para ti equivaldría a hacer eso:
address temp_address = {}; // will zero all fields in C++
temp_address.city = "Hamilton";
temp_address.prov = "Ontario";
Sin duda, esto es lo más cercano a lo que deseaba originalmente (ponga a cero todos los campos excepto aquellos que desea inicializar).