diferença de desempenho em para a condição loop?
-
11-09-2019 - |
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.
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".