2014-02-11 3 views
0

I는 C로 프로그래밍 미치자 ++ (12 월 C++) -Unary Post Operators가 C++ 및 Java에서 다르게 동작하는 이유는 무엇입니까?

I 자바에서 실행할 때 변수

int k = 5; 
k = k++; 
cout<<"Value of K :"<<k<<endl; 

int l = 5; 
l = l++ + l++; 
cout<<"Value of L :"<<l<<endl; 

int m = 5; 
m = m++ + m++ + m++; 
cout<<"Value of M :"<<m<<endl; 

얻은 5,12- (18)는, L 및 m ..하지만 동일한 프로그램 케이

int k = 5; 
k = k++; 
System.out.println("Value of K :"+k); 

int l = 5; 
l = l++ + l++; 
System.out.println("Value of L :"+l); 

int m = 5; 
m = m++ + m++ + m++; 
System.out.println("Value of M :"+m); 

난 후 단항 연산자의 계산에 차이가 왜

.. 설명 변수, L 및 M을 k에 대한 5,11 18 있나? 운영자의 우선 순위 및 우선 순위 규칙을 알고 있습니다. 그러나 모든 것은 여기서 실패합니다. 하지만 C++의 답변은 규칙에 따라 합리적으로 보입니다. 자바 계산 방법이 혼란 스럽습니까?

잘 알려진 C++ 및 Java가 다릅니다. Java에서 운영자 우선 순위 및 운영자 우선 순위를 처리하는 방법을 제안하십시오.

+4

C++ 하나는 정의되지 않은 동작입니다. 자바 하나가 문서화되어있다. – chris

+2

가능한 [정의되지 않은 동작 및 순서 포인트] (http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) - C++ 및 Java는 두 가지 다른 언어입니다. Java에서는 동작이 명시 적으로 정의됩니다. –

+0

@BrianRoach : 그 질문은 C++ 동작을 설명합니다. 그는 C++ 동작에 대해 궁금하지 않습니다 (비록 그가 있어야하지만, 그의 해석은 완전히 잘못되었습니다). 그가 이해하지 못하는 자바의 행동입니다. –

답변

1

Java 규칙은 여기에서 매우 간단합니다. 하위 표현식 (각 접미사 연산자에 대한 호출)은 왼쪽에서 오른쪽으로 평가되며 각 표현식은 다음에 완전히 평가됩니다.

int k = 5; 
k = k++; 

이것은 6-k를 증가하지만, 이전 값 (5)을 반환하고 k에 있음을 할당합니다. 그래서 k 6 5.

int l = 5; 
l = l++ + l++; 

l++ 단위 l이고 이전 값 (5)을 평가한다. 그 다음 l++는 이전과 동일한 공정을 이용하여 제

int m = 5; 
m = m++ + m++ + m++; 

, 우리 단지를 생성 ~ 7 l를 증가하고, 제 5 평가 및도 6을 함께 첨가하고 l에 할당되는, 호출 한 번 더 해보십시오. 따라서 5 + 6 + 7을 추가하고 결과를 m (18이됩니다)에 할당하는 것과 같습니다.

C++은 사용자가 이해하고 있음에도 불구하고 너무 간단하지 않습니다. 사실 this question에 대한 답변에서 철저히 설명 된 것처럼 정의되지 않은 동작입니다. 규칙이 없으므로 어떤 결과라도 볼 수 있습니다. 하지 마.

+0

@ Benjamin .. 위와 같이 동일한 해결 방법을 만들었습니다. 놀랍게도 그것은 작동하고 정답을줍니다. 하지만 해결 방법이 아니거나 정의 된 규칙으로 간주 될 수 있는지 확인하지 마십시오. – Jain

+1

@ALEN : 무슨 해결책이 있습니까? 무엇에 대한 대안? –

+0

@Benjamin .. "5 + 6 + 7 해결 방법"에 대해 이야기하고 있습니다. 단항 증가 및 감소 연산자는 oprand의 메모리 위치를 먼저 조작합니다. C++에서는 먼저 5를 모두 더한 다음 단항 연산자를 수행하는 것과 같습니다. 예를 들면 .5 + 5 + 5 = 15 그리고 3 번의 포스트 감소를 수행하십시오. – Jain

관련 문제