AFAIK, если в блоке "if" не указаны фигурные скобки, тогда внутри него рассматривается только 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 demo: без брекетов и с фигурными скобками.