2010-06-09 11 views
13
struct some_struct{ 
    int a; 
}; 
some_struct n = {}; 

n.a será 0 después de esto;Inicialización explícita de los miembros struct/class

Sé que esta forma de llaves de inicialización se hereda de C y es compatible para compatibilidad con programas C, pero esto solo se compila con C++, no con el compilador de C. Estoy usando Visual C++ 2005.

En C este tipo de inicialización

struct some_struct n = {0}; 

es correcta y pondrá a cero a inicializar todos los miembros de una estructura.

¿El par de llaves vacías forma parte de la inicialización estándar? La primera vez que vi esta forma de inicialización fue en un tutorial de WinAPI de msdn.

Respuesta

9

La forma de inicialización de llaves vacías es estándar en C++ (está permitido explícitamente por la gramática). Vea C Static Array Initialization - how verbose do I need to be? para más detalles si está interesado.

Supongo que se agregó a C++ porque podría no ser apropiado que se use un valor 0 para un valor init predeterminado en todas las situaciones.

8

Es estándar en C++, no es en C.

La sintaxis era introducido en C++, porque algunos objetos no se pueden inicializar con 0, y no habría una forma genérica de realizar la inicialización de valores de las matrices.

0

El {0} es C99 aparentemente.

Otra forma de inicializar en un C89 y C++ es compatible manera este "truco":

struct {some_struct int a; };

static some_struct zstruct;

some_struct n = zstruct;

Esto utiliza el hecho de que las variables estáticas se preinicializan con memoria de 0'ed, contrariamente a las declaraciones en la pila o en el montón.

+0

La inicialización con '{0}' también es válida para C89. – jamesdlin

Cuestiones relacionadas