Se planteó la cuestión en los comentarios de una respuesta a la pregunta Is C/C++ bool type always guaranteed to be 0 or 1 when typecast'ed to int?¿Está leyendo un comportamiento indefinido de valor indeterminado?
El código en cuestión asigna una matriz (local) de bool
sin inicializar su valor.
const int n = 100;
bool b[n];
Claramente los valores en b
son indeterminados.
Algunos de los comentaristas opinaron que, por ejemplo, leer b[0]
era un comportamiento indefinido. ¿Esto está establecido en cualquier lugar del estándar C++? Todavía estoy convencido de lo contrario:
Existe claramente asigna el almacenamiento y la inicialización del tipo bool fundamental es completa, ya que no tiene un constructor. Por lo tanto, ciertamente no es lo mismo que desreferenciar un puntero no inicializado o llamar a los operadores de métodos/colada en objetos no triviales no inicializados. Estos casos específicos parecen estar cubiertos por el estándar.
El comportamiento de hecho no está definido en C: What happens to a declared, uninitialized variable in C? Does it have a value? y algunos encuestados parecen confundir a los dos.
En el último borrador de C++ 0x no puedo encontrar ninguna definición de valor indeterminado especialmente ninguna definición que permita acceder a dicho valor para activar un procesador de trampa. De hecho, Bjarne Stroustrup no está seguro de lo que puede ser un valor inderminate: http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html
Ah, bueno, "Comportamiento indefinido" es un término muy favorito aquí en StackOverflow y se usa para todo, desde la definición de la implementación, hasta el indefinido hasta el no definido. –
Me refiero a los proverbiales "demonios nasales" como indefinidos. – Sebastian
Y por cierto. 8.5 - 9 habla sobre esto. –