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