Pergunta

Eu tenho uma pergunta simples que eu estou posando principalmente para a minha curiosidade.

Quais são as diferenças entre estas duas linhas de código? (Em C ++)

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

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

A selecção das condições é completamente arbitrária, eu só estou interessado nas diferenças entre e &&.

Eu não sou um novato para codificação por qualquer meio, mas nunca se preocupou com o operador vírgula.

Existem desempenho / diferenças de comportamento ou é puramente estético?

Uma última nota, eu sei que há peixes maiores desempenho para fritar do que um operador condicional, mas estou apenas curioso. Delicie-me.

Editar Obrigado por suas respostas.

Acontece que o código que levou esta questão tinha abusado o operador vírgula da maneira que eu descrevi. Eu me perguntava qual era a diferença e por isso não era um operador &&, mas foi apenas escrito incorretamente. Eu não acho que alguma coisa estava errada com ele porque ele trabalhou muito bem. Obrigado por me endireitar.

Foi útil?

Solução

Embora parece que,

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

e

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

não são equivalentes.

Aqui está a prova.

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

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

Resultado:

5

O que significa que o ao determinar quando o laço vai sair ele usará N > 0. Se N = 10, isso significa que ele será sempre verdadeiro e o loop nunca vai sair.

Executar este e ver a prova.

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

Se N é uma constante ou variável que não muda dentro do loop em seguida, você pode simplesmente remover a seleção N > 0, verificando-lo uma vez em primeiro lugar, ou seja.

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

Outras dicas

Usando uma vírgula como que simplesmente descartar a primeira condição .

Os meios operador vírgula "executar estas instruções nesta ordem, e tomar o valor do último".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top