Различие в производительности в для условия цикла?

Существует действительно не очень, можно сделать помимо взгляда на отслеживание стека; при разыменовании нескольких ссылок на объект в той же строке кода нет никакого способа определить, какой является пустым, не устанавливая точку останова. Вы могли избежать этого, только разыменовав один объект на строку, но это приведет к некоторому довольно ужасно выглядящему коду.

7
задан Jon Seigel 18 May 2010 в 01:55
поделиться

2 ответа

Хотя кажется, что

for(int i = 0; i < N, N > 0; i++)

и

for(int i = 0; i < N && N > 0; i++) 

не эквивалентны.

Вот доказательство.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

Результат:

5

Это означает, что при определении, когда цикл выйдет, он будет использовать N> 0 . Если N = 10 , это означает, что оно всегда будет истинным, и цикл никогда не завершится.

Запустите это и посмотрите доказательство.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}

bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

Если N - константа или переменная, которая не выполняется изменение внутри цикла тогда вы можете просто удалить проверку N> 0 , проверив ее сначала один раз, т.е.

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}
10
ответ дан 6 December 2019 в 04:58
поделиться

Использование такой запятой просто отбрасывает первое условие .

Оператор запятой означает «запускать эти операторы в этом порядке и брать значение последнего».

33
ответ дан 6 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: