Вопрос возник в комментариях к ответу на вопрос Всегда ли тип bool C / C ++ гарантированно равен 0 или 1 при приведении типов в int?
Рассматриваемый код выделяет (локальный) массив bool
без инициализации их значения.
const int n = 100;
bool b[n];
Очевидно, что значения в b
являются неопределенными.
Некоторые из комментаторов считают, что чтение, например, b [0]
было неопределенным поведением. Об этом говорится где-нибудь в стандарте C ++? Я все еще убежден в обратном:
Очевидно, что память выделена, и инициализация базового типа bool завершена, поскольку у него нет конструктора. Таким образом, это, конечно, не то же самое, что разыменование неинициализированного указателя или вызов методов / операторов приведения к неинициализированным нетривиальным объектам. Кажется, что эти конкретные случаи охватываются стандартом.
Поведение действительно не определено в C: Что происходит с объявленной неинициализированной переменной в C? Имеет ли это значение? , и некоторые респонденты, похоже, путают их.
В последнем проекте C ++ 0x я не могу найти определения неопределенного значения , особенно определения, которое позволяло бы получить доступ к такому значению, чтобы вызвать прерывание процессора. В самом деле, Бьярн Страуструп не уверен, каким может быть внутреннее значение: http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html