source

쉼표 연산자에서 'return', 'continue' 또는 'break'이 작동하지 않는 이유는 무엇입니까?

manycodes 2023. 7. 30. 17:57
반응형

쉼표 연산자에서 '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

반응형