Не определено ли чтение неопределенного значения поведение?

Вопрос возник в комментариях к ответу на вопрос Всегда ли тип bool C / C ++ гарантированно равен 0 или 1 при приведении типов в int?

Рассматриваемый код выделяет (локальный) массив bool без инициализации их значения.

const int n = 100;
bool b[n];

Очевидно, что значения в b являются неопределенными.

Некоторые из комментаторов считают, что чтение, например, b [0] было неопределенным поведением. Об этом говорится где-нибудь в стандарте C ++? Я все еще убежден в обратном:

  1. Очевидно, что память выделена, и инициализация базового типа bool завершена, поскольку у него нет конструктора. Таким образом, это, конечно, не то же самое, что разыменование неинициализированного указателя или вызов методов / операторов приведения к неинициализированным нетривиальным объектам. Кажется, что эти конкретные случаи охватываются стандартом.

  2. Поведение действительно не определено в C: Что происходит с объявленной неинициализированной переменной в C? Имеет ли это значение? , и некоторые респонденты, похоже, путают их.

  3. В последнем проекте C ++ 0x я не могу найти определения неопределенного значения , особенно определения, которое позволяло бы получить доступ к такому значению, чтобы вызвать прерывание процессора. В самом деле, Бьярн Страуструп не уверен, каким может быть внутреннее значение: http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html

11
задан Community 23 May 2017 в 12:34
поделиться