Почему допустимо переходить в область видимости объекта скалярного типа без инициализатора?

Когда я читаю стандарт C ++, мне кажется, что следующий код полностью соответствует стандарту.

int main() {
   goto lol;
   {
      int x;
lol:
      cout << x << endl;
   }
}

// OK

[n3290: 6.7 / 3]: можно передать в блок, но не в способ обхода объявлений с инициализацией. Программа, которая перескакивает с точки, в которой переменная с автоматической продолжительностью хранения вне области видимости до точки, в которой она находится в области видимости, неправильно сформирована , если только переменная имеет скалярный тип , тип класса с тривиальным значением по умолчанию конструктор и тривиальный деструктор, квалифицированная версия одного из эти типы или массив одного из предыдущих типов и объявляется без инициализатора .

Почему это должно работать? Не опасно ли перескакивать через его определение и использовать undefined x ? И почему наличие инициализатора должно иметь какое-то значение?

6
задан Eric Z 16 December 2011 в 03:39
поделиться