Блок «если» без фигурных скобок делает последующее «иначе если» вложенным

Насколько я знаю, если в блоке «если» не указаны фигурные скобки, то внутри него рассматривается только 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:без фигурных скобок и с фигурными скобками ].

21
задан iammilind 31 July 2012 в 06:48
поделиться