문제

나는 주로 호기심을 위해 포즈를 취하고 있다는 간단한 질문이 있습니다.

이 두 줄의 코드의 차이점은 무엇입니까? (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++)
   ...
}

다른 팁

그런 쉼표를 사용하면 간단합니다 첫 번째 조건을 폐기하십시오.

쉼표 연산자는 "이 명령문을이 순서로 실행하고 마지막 진술의 가치를 취한다"는 것을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top