2012-06-22 23 views

Respuesta

17

Esto se conoce como valor de inicialización. Del estándar C++ 03, §8.5/7:

Un objeto cuyo inicializador es un conjunto vacío de paréntesis, es decir,(), se inicializará con el valor.

Y desde §8.5/5:

Para valor-inicializar un objeto de tipo T significa:

  • si T es un tipo de clase con un constructor-declarado usuario , entonces se llama al constructor predeterminado para T (y la inicialización está mal formada si T no tiene un constructor predeterminado accesible);
  • si T es un tipo de clase no sindical sin un constructor declarado por el usuario, entonces cada miembro de datos no estáticos y componente de clase base de T tiene un valor inicializado;
  • si T es un tipo de matriz, entonces cada elemento se inicializa en valor;
  • de otro modo, el objeto se inicializa a cero

Para cero inicializar un objeto de tipo T significa:

  • si T es un tipo escalar, el objeto se establece en el valor de 0 (cero) convertido a T;
  • si T es un tipo de clase no sindical, cada miembro de datos no estático y cada subobjeto de clase base tiene cero inicializador;
  • si T es un tipo de unión, el primer miembro de datos con nombre del objeto) no se inicializa;
  • si T es un tipo de matriz, cada elemento tiene cero inicialización;
  • si T es un tipo de referencia, no se realiza ninguna inicialización.

Así, en su caso, depende de la definición de SpiHandleT:

  • Si se trata de un escalar, será cero inicializado
  • Si se trata de un tipo de clase sin una constructor declarado por el usuario, sus subobjetos serán (recursivamente) de valor inicializado
  • Si se trata de un tipo de clase con un constructor declarado por el usuario , será construido por defecto
Cuestiones relacionadas