루프 조건의 성능 차이?
-
11-09-2019 - |
문제
나는 주로 호기심을 위해 포즈를 취하고 있다는 간단한 질문이 있습니다.
이 두 줄의 코드의 차이점은 무엇입니까? (C ++)
for(int i = 0; i < N, N > 0; i++)
for(int i = 0; i < N && N > 0; i++)
조건의 선택은 완전히 임의적이며, & &에서의 차이점에 관심이 있습니다.
나는 어떤 방법 으로든 코딩을 초보자는 아니지만 쉼표 운영자와 신경 쓰지 않았습니다.
성능/행동 차이가 있습니까? 아니면 순전히 미학입니까?
마지막으로, 나는 조건부 운영자보다 더 큰 성능 물고기가 있다는 것을 알고 있지만, 나는 단지 궁금합니다. 나를 탐닉합니다.
편집하다답변 해주셔서 감사합니다.
이 질문을 제기 한 코드는 내가 설명한 방식으로 쉼표 연산자를 잘못 사용했다는 것이 밝혀졌습니다. 나는 그 차이가 무엇인지, 왜 그것이 && 운영자가 아닌지 궁금했지만 방금 잘못 쓰여졌다. 나는 그것이 잘 작동했기 때문에 아무것도 잘못되었다고 생각하지 않았습니다. 나를 곧게 펴 주셔서 감사합니다.
해결책
비록 그것이 보이지만
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++)
...
}
다른 팁
그런 쉼표를 사용하면 간단합니다 첫 번째 조건을 폐기하십시오.
쉼표 연산자는 "이 명령문을이 순서로 실행하고 마지막 진술의 가치를 취한다"는 것을 의미합니다.
제휴하지 않습니다 StackOverflow