Хотя в соответствии с синтаксисом for цикл должен начинаться оператор инициализации, а затем проверка и затем обновление, так как ваш контрольный оператор является инициализацией во втором примере, i инициализируется как 5 как часть проверки и цикл for продолжается.
Используя вызов Foo() в инициализации не имеет никакого значения к для цикла, как тип возвращаемого значения является недействительным, , если поставить 0 вместо Foo(), вы получите тот же результат
Теперь рассмотрим первый пример, ваш проверочный оператор является инициализацией, как и второй пример, и он будет работать, если у вас не было этих скобок. Поскольку декларация не возвращает никакого значения, (int i = 5) не возвращает никакого значения и, следовательно, не может сравниться с 5 в «== 5».
Однако, если вы пытаетесь "для (Foo(); Int я = 5 == 5; ++ я) ...", оператор проверки компилирует же, как INT I = (5 = = 5). Поскольку значение 5 == 5 истинно, оно возвращает значение 1, которое затем инициализируется как значение i. Таким образом, выход составляет 11111 ......
TL; 44: Поскольку декларация не возвращает никакого значения, (int i = 5) не возвращает никакого значения и, следовательно, не может сравниться с 5 в «== 5», как в первом примере
Проблема решена.
Поскольку 'int i = 5' не является допустимым выражением? И вам нужно правильное выражение в круглых скобках. –
Даже если ваша вторая программа компилируется, вы будете поражены бесконечным циклом. Он будет печатать «5» на терминале. – abhiarora
Что еще более интересно, так это то, что если вы инициализируете i до 0, он возвращает false. –