¿El tamaño de [prueba] es 10 al final de esta secuencia?
Sí. En la última línea de su código, size[test]
valor inicializa el elemento de T()
, o en este caso size_t()
:
C++ 11 23.4.4.3 mapa de acceso elemento [map.access]
T& operator[](const key_type& x)
;
1 Efectos: si no hay una clave equivalente a x en el mapa, inserta value_type (x, T()) en el mapa.
En cuanto a T()
, el lenguaje exacto es un algo complicada, así que trataré de citar los bits relevantes:
C++ 11 8.5.16 La semántica de inicializadores son los siguientes.
- Si el inicializador es(), el objeto se inicializa en valor.
8.5.7 Para valor inicializar un objeto de tipo T significa:
- si T es un tipo de clase (posiblemente cv-cualificado) ...
- si T es una (posiblemente cv-calificada) de tipo no-unión de clase ...
- si T es un tipo de matriz, cada elemento es valor-inicializado;
- de lo contrario, el objeto se inicializa en cero.
8.5.5 Para cero inicializar un objeto o de referencia de tipo T significa:
- si T es un escalar tipo (3.9), el objeto se establece en el valor 0 (cero), tomado como una expresión de constante integral, convertida a T;
He leído esa parte de los documentos, pero no estaba seguro de las implicaciones. ¿Qué significa "construido por defecto" para un tipo integral como size_t? (¿Puedes citar un estándar, preferiblemente?) – Suma
@Suma: los tipos integrales no son tipos de clase, por lo que no tienen constructores. Inicializar el valor de esos tipos equivale a cero inicialización. (Capítulo 8.) –
@KerrekSB ¿Estás seguro de que no estás confundiendo C++ con Java? Builtins no construye por defecto a cero. – spraff