연산자 우선순위 및 증가 연산자의 프로그래밍 언어 변형
다른 프로그래밍 언어는 연산자 우선순위와 증가/감소 연산자를 고유한 방식으로 처리하므로 표현식을 평가할 때 다양한 결과가 발생합니다. 이러한 차이는 사전 및 사후 증가 연산자에서 특히 두드러집니다.
C/C : 정의되지 않은 동작
C와 C는 불특정 평가 순서를 나타냅니다. 즉, 시퀀스 포인트가 없는 단일 표현식 내에서 동일한 변수가 여러 번 수정되면 결과가 정의되지 않으며 컴파일러 및 최적화 설정에 따라 달라질 수 있습니다.
Java/C#: 정의된 평가 순서
반면에 Java와 C#은 표현식의 왼쪽에서 오른쪽 평가를 보장합니다. 변수 증가와 같은 부작용은 표현식이 평가되는 즉시 발생합니다.
예시
이 코드를 분석해 보겠습니다.
<code class="language-c++">int a = 2; int b = a++ + a++; int c = ++a + a++ + a++;</code>
관찰 결과:
아래 표는 a
, b
, c
값이 언어별로 어떻게 다른지 보여줍니다.
Language | a | b | c |
---|---|---|---|
C | 7 | 4 | 15 |
C | 7 | 4 | 15 |
Java | 7 | 5 | 16 |
C# | 7 | 5 | 16 |
불일치 설명:
Java 및 C#: 왼쪽에서 오른쪽으로 일관되게 평가하면 예측 가능한 결과가 생성됩니다. a
(사후 증가)는 a
증가 전의 현재 값을 반환하는 반면, a
(사전 증가)는 값을 반환하기 전을 증가시킵니다.
C 및 C : C 및 C의 정의되지 않은 동작은 보장된 평가 순서가 부족하기 때문에 발생합니다. 컴파일러는 순서에 관계없이 증분을 자유롭게 평가할 수 있으므로 a
, b
및 c
에 대해 서로 다른 최종 값이 생성됩니다. 표시된 결과는 예시입니다. 다른 결과도 가능합니다. 이러한 예측 불가능성을 피하려면 C 및 C의 단일 표현식 내에서 동일한 변수를 여러 번 수정하지 않는 것이 가장 좋습니다.
위 내용은 연산자 우선순위 및 증분 연산자는 C, Java 및 C#과 같은 프로그래밍 언어에서 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!