쉼표 연산자에서 'return', 'continue' 또는 'break'이 작동하지 않는 이유는 무엇입니까?
나는 코드를 쓸 수 있습니다.if(1) x++, y++;
대신에if(1) {x++; y++;}
그러나 일부 경우에는 작동하지 않습니다(아래 참조).이것에 대해 말씀해 주시면 감사하겠습니다.
int x = 5, y = 10;
if (x == 5) x++, y++; // It works
if (x == 5) x++, return 0; // It shows an error
동일하게 적용됩니다.for
루프:
for (int i = 0; i < 1; i++) y++, y += 5; // It works
for (int i = 0; i < 1; i++) y++, break; // Does not work
그것은return
그리고.break
식이 아니라 문입니다.따라서 다른 식에서는 사용할 수 없습니다.if
그리고 다른 것들도 마찬가지로 진술입니다.
하지만 당신이 할 수 있는 것은 당신의 표현을 다시 쓰는 것입니다.return
식에 중첩되지 않도록 - 다음과 같은 코드를 작성하는 것이 좋습니다.
return x++, 0;
때문에 그렇게 할 수 없습니다.break
표현을 받아들이지 않기 때문입니다.
쉼표 연산자는 식에 사용됩니다.
그return
문 및 기타 순수 문은 식이 아닙니다.
쉼표 연산자는 두 개의 값을 사용하는 이항 연산자입니다.이 방식은 다음과 같습니다.+
또는*
.반면에.+
두 개의 값을 추가하고 결과를 반환합니다.*
두 값을 곱한 후 결과를 반환합니다. 쉼표 연산자는 왼쪽의 값을 무시하고 오른쪽의 값을 반환합니다.
2 + 5
가치가 있습니다.7
2 * 5
가치가 있습니다.10
2 , 5
가치가 있습니다.5
조작자의 오른쪽에 있는 피연산자.
그래서 당신은 글을 쓸 수 없습니다.2,break
당신이 쓸 수 없는 것과 같은 이유로.2+break
브레이크는 값이 아니라 문이기 때문입니다.
피연산자 중 하나를 무시하는 이진 연산자가 무슨 소용이 있습니까?쉼표 연산자는 왼쪽 피연산자의 값을 무시하지만 식은 계속 평가됩니다.그 표현의 어떤 부작용도 여전히 실현되고 있습니다.고려 사항:
i = 2;
j = 5;
i++, j++;
먼저 두 표현식을 평가합니다.i++
값을 반환합니다.2
그런 다음 증분합니다.i
.j++
값을 반환합니다.5
그런 다음 증분합니다.j
마지막으로 쉼표 연산자가 다음 두 값에 적용됩니다.2,5
그것은 무시합니다.2
를 반환합니다.5
.
언급URL : https://stackoverflow.com/questions/51942943/why-do-return-continue-or-break-not-work-with-the-comma-operator
'source' 카테고리의 다른 글
MockMVC를 사용한 통합 테스트 스프링 부트 (0) | 2023.07.30 |
---|---|
최적화를 통해 손상된 인덱스이지만 검사 또는 분석을 통해 손상되지 않음 (0) | 2023.07.30 |
C - 문자열을 문자열 배열로 분할 (0) | 2023.07.30 |
Axios API에서 데이터를 반환하는 중 (0) | 2023.07.30 |
socket.io 방 또는 네임스페이스? (0) | 2023.07.30 |