#include <iostream>
using namespace std;
int main() {
int i = 0;
if(true) {
int i = 5;
cout << i << '\n';
}
return 0;
}
Попытался запустить приведенный выше код на Ideone, чтобы убедиться, что он разрешен.Результаты меня сбивают с толку:
- У нас есть ошибка компиляции (1) , (2)
- Или этот код печатает
5
как и ожидалось (1) - Или ничего не печатается (1) , (2)
Как вы можете видеть из моих ссылок, этот код работает по-разному каждый раз, когда компилируется в Ideone!Это пахнет неопределенным поведением (UB).
OK C ++ известен своими не интуитивными поведениями, НО!- Я признаю, что это просто моя интуиция, но я не ожидаю, что даже C ++ сделает переопределение переменной во внутренней области видимости UB!Я ожидал бы либо затенения, либо обязательной ошибки компиляции.
Является ли мой код действительно UB в соответствии со стандартом C ++, или это просто особенность Ideone и / или gcc?Если это UB, это UB, потому что я объявил i
или по какой-то другой причине, которую я сейчас не замечаю?