Насколько я знаю, если в блоке «если» не указаны фигурные скобки, то внутри него рассматривается только 1 оператор. например.
if(..)
statement_1;
statement_2;
Независимо от вкладок внутри блока if
рассматривается только statement_1
.
Следующий код не совместим с этим:
int main ()
{
if(false) // outer - if
if(false) // nested - if
cout << "false false\n";
else if(true)
cout << "true\n";
}
Код выше ничего не печатает. Он должен был напечатать "true"
.
Похоже, что else if
автоматически вкладывается внутрь внешнегоif
блокировать. g++ -Wall
выдает предупреждение,но тут не в этом вопрос. Как только вы ставите фигурные скобки, все идет нормально, как и ожидалось.
Почему такое разное поведение?
[демонстрация GCC:без фигурных скобок и с фигурными скобками ].