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