더북(TheBook)

이항 연산자 가운데 우리가 수학에서 배운 것과 동일한 연산을 수행하는 연산자들이 있다. 곱셈과 나눗셈은 덧셈과 뺄셈보다 먼저 계산하고, 연산은 왼쪽에서 오른쪽 순서로 결합(left-associative)한다. 즉,

x - y + z

는 항상

(x - y) + z

로 해석한다. 여러분이 정말로 중요하게 기억해야 할 것은 인수들의 계산 순서는 정의되지 않았다는 점이다. 예를 들어,

int i = 3, j = 7, k;
k = f(++i) + g(++i) + j;

이 예제에서 결합성(associativity)에 따라 첫 번째 덧셈이 두 번째 덧셈보다 먼저 수행됨을 보장한다. 그러나 f(++i)g(++i) 중 어느 표현식이 먼저 계산될 것인지는 컴파일러 구현에 따라 달라진다. 따라서 kf(4) + g(5) + 7이나 f(5) + g(4) + 7 중 하나일 것이다. 게다가 서로 다른 플랫폼에서 같은 결과가 나온다고 가정할 수도 없다. 일반적으로 표현식 안에서 값을 수정하는 것은 위험하다. 몇 가지 조건에서는 동작할지도 모르지만, 항상 테스트하고 주의 깊게 살펴봐야 한다. 차라리 몇 자 더 입력해서 분리하는 게 시간을 아낄 수 있는 더 나은 방법이다. 이에 대해 더 자세한 사항은 1.3.12절을 보라.

⇒ C++03/num_1.cpp

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.