2011-08-09 14 views
5
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

vector<int> vec(10); 
cout << "vec.size: " << vec.size() << endl; 
for (vector<int>::const_iterator iter=vec.begin(); iter != vec.end(); ++iter) 
{ 
    cout << *iter << endl; 
} 

salida de VS2010:C++ estándar: default "const T & valor" en el constructor del vector para el tipo 'int'

vec.size: 10 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 

Pregunta>: Basado en la última C++ estándar, lo que es el int predeterminado valor cuando definimos un objeto de vector mediante el uso de vectorObject (size_type)?

Aquí, como puede ver, VS2010 genera 0 como el valor int predeterminado. Pero no sé si esto es requerido por el estándar C++.

+3

Permitiré que los abogados del lenguaje traigan la diferencia entre la inicialización del valor, la inicialización predeterminada y la inicialización cero. Pero tenga la seguridad de que 'T()' produce cero cuando 'T' es un tipo numérico primitivo. –

Respuesta

13

Sí, este es el comportamiento requerido. T() para cualquier tipo numérico T produce 0 (de tipo T, por supuesto).

Esto se llama valor de inicialización, que para tipos numéricos es el mismo que cero inicialización.

+1

Es útil que también se supone que funciona para * matrices * de tipos numéricos, 'T x [7]();'. –

+1

Consulte [esta respuesta] (http://stackoverflow.com/questions/5950144/weird-c-code-snippet/5950176#5950176) para obtener información completa. – ildjarn

Cuestiones relacionadas