프로그래밍 강의/C#

C# 6.0, 피연산자의 평가

wnsrn3436 2017. 7. 2. 20:12

C#에서는 연산자 우선순위에 따라 우선순위가 높은 연산자는 우선순위가 낮은 연산자보다 먼저 실행되며, 우선순위가 같은 연산자끼리는 '좌 결합성'과 '우 결합성'에따라 실행된다. 예를 들어 x+y*z라는 코드는 x+(y*z)로써 실행될 것이다. 여기서 주의해야 할 것은, 이러한 우선순위와 결합성은 연산자들이 실행되는 순서에만 영향을 끼친다는 것이다. 절대 피연산자의 평가 순서에 영향을 주지 않는다.


C#에서 피연산자는 항상 왼쪽에서 오른쪽으로 평가된다. A()+B()*C()라는 코드는 'A()->B()->C()' 순으로 평가(호출)되고, 평가된 결과(return)값을 런타임은 우선순위와 결합성을 이용하여 계산한다.


그렇다면 x가 1일 때, F(x++, x++)와 같은 함수 호출은 C#에서는 어떻게 반응할까?


- C++의 문법에서는 이것에 대해 딱히 정해진 규칙이 없기 때문에 이와 같은 호출은 컴파일러에 따라 F(2,1) 혹은 F(1, 2)가 될 수 있다.

- C#에서는 피연산자가 항상 왼쪽에서 오른쪽으로 평가되기 때문에 무조건 F(1, 2)로 호출된다. 또한, 이 경우 F함수 내에서 바라보는 x값은 3으로 보장받게 되는데, 이는 C#에서 증가된 값의 변수에 대한 할당이 해당 식의 값이 사용되기 전에 일어나기 때문이다. 반면 C++에서는 이것 또한 3이 될지 2가 될지를 보장하지 않는다.

Comments