int
no se inicializa a cero. Cuando dice int i;
, todo lo que hace es reservar espacio para un número entero. El valor en esa ubicación no se inicializa. Eso solo se hace con usted, digamos int i = 0;
(o int i = 5;
en cuyo caso el valor se inicializa a 5). En cualquier caso, es una buena práctica inicializar una variable a algún valor conocido. De lo contrario, i
contiene el valor aleatorio que estaba en esa ubicación de memoria cuando el espacio estaba reservado para ello. Esta es la razón por la cual cout
imprime un valor aleatorio.
Los valores predeterminados dependen de la implementación del idioma. Algunos idiomas lo inicializarán a algún valor "sano" (como 0 quizás). Como regla general, siempre inicializo una variable a algún valor razonable (a menos que sepa que voy a inicializarlo en algo más con seguridad antes de usarlo). Como mencioné antes, es imprudente para suponer que el valor va a ser algo sensato. Puede o no ser (dependiendo del idioma, o la implementación del intérprete/compilador de ese idioma).
El primer punto es un poco inexacto. Se inicializará automáticamente si no es un tipo de POD. :) – jalf
Derecha, cambió eso;) thx – AndiDog
Las variables con duración de almacenamiento estático de "tipo simple" también se inicializan a cero (o un puntero nulo, en el caso de los punteros). Esto sería algo declarado como 'estático' dentro de una función, o algo declarado en el ámbito del espacio de nombres (es decir, fuera de cualquier función). –