Inicialización de estructura C ++ [duplicado]

Resuelto Dinesh P.R. asked hace 12 años • 17 respuestas

¿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:

  1. C/C++ para AIX
  2. Inicialización de estructura C con variable
  3. Inicialización de estructura estática con etiquetas en C++
  4. Inicialización adecuada de la estructura de C ++ 11
Dinesh P.R. avatar Jul 17 '12 12:07 Dinesh P.R.
Aceptado

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
};
Wyzard avatar Jul 17 '2012 06:07 Wyzard

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).

Gui13 avatar Jul 17 '2012 06:07 Gui13