Когда я читаю стандарт C ++, мне кажется, что следующий код полностью соответствует стандарту.
int main() {
goto lol;
{
int x;
lol:
cout << x << endl;
}
}
// OK
[n3290: 6.7 / 3]: можно передать в блок, но не в способ обхода объявлений с инициализацией. Программа, которая перескакивает с точки, в которой переменная с автоматической продолжительностью хранения вне области видимости до точки, в которой она находится в области видимости, неправильно сформирована , если только переменная имеет скалярный тип , тип класса с тривиальным значением по умолчанию конструктор и тривиальный деструктор, квалифицированная версия одного из эти типы или массив одного из предыдущих типов и объявляется без инициализатора .
Почему это должно работать? Не опасно ли перескакивать через его определение и использовать undefined x
? И почему наличие инициализатора должно иметь какое-то значение?