Почему нет немедленного приращения, когда i ++ определяется как приращение для l oop, тогда как это отражается в случае оператора if? - PullRequest
0 голосов
/ 24 марта 2020

Я только начинающий в C ++, и я сталкивался с этим экземпляром.

#include <iostream>
using namespace std;
int main(){
  int c = 3;
  int d = c++;
  if (c++ == 4 && d == 3)
    cout << "1: " << c << " " << d << endl;
  if (++c == 5 && d-- == 3)
    cout << "2: " << c-- << " " << d << endl;
  cout << "3: " << c << " " << d << endl;
}

Таким образом, в этом случае вывод будет:

1: 5 3
3: 6 3 

И что я понимаю отсюда следует, что переменные все равно будут обновляться, даже если они вызываются для приращения в операторе if.

Теперь я столкнулся с этим:

#include <iostream>
using namespace std:
int main(){
   for (int i= 1; i <= 10; ++i){
     cout << i ;
     break
   }
}

И хотя его приращение увеличивается, он возвращает только 1. Поэтому я подумал, что, возможно, во второй раз он проходит через l oop (после удаление разрыва конечно) он вернул бы 3, потому что тогда он бы прошел через ++ i дважды, но все равно 2. Я не понимаю. Поэтому мой вопрос заключается в том, почему в операторе if происходит мгновенное увеличение, но его нет, когда ++ i существует в for l oop?

EDIT: просто исправлена ​​опечатка. Я должен был ввести точку с запятой, но вместо этого поставить запятую: b

РЕДАКТИРОВАТЬ: добавил более простой вопрос, поскольку некоторые задаются вопросом, что я спрашиваю.

1 Ответ

5 голосов
/ 24 марта 2020

A для оператора состоит из 4 частей, они не в том порядке, в котором они выполняются.

for ( init-statement condition; iteration_expression) statement

* определяется как эквивалент до

{
    init_statement
    while ( condition ) {
        statement
        iteration_expression ;
    }
}

За исключением что

  1. Имена, объявленные оператором init (если init-оператор является объявлением) и имена, объявленные условие ( если условие является декларацией) находятся в той же области (которая также является областью действия оператора ).
  2. continue в операторе выполнит iteration_expression
  3. Пусто условие эквивалентно while(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...