Profile

Dev Studio

OPNay

[C++] 연산자 우선순위

C++의 연산자 우선순위는 굉장히 중요합니다. 이를 고려하지 않고 프로그래밍을 하게 된다면, 의도치 않은 방향으로 프로그램이 진행될 수 있으며, 버그를 일으키거나, 극단적으로는 프로그램이 멈추거나, 컴파일에서 에러가 발생할 수 있습니다.

하지만 C++에서의 연산자의 개수는 많아서, 외우는 것보다는 오류나, 논리적인 오류가 발생했을 때 참고하는 정도로 하시는게 좋습니다. 또한, C++을 자주 사용하시다보면 자연스럽게 외워지는게 연산자 우선순위입니다.


우선순위는 그룹별로 나뉘며, 그룹중 1그룹이 가장 먼저 적용됩니다. 그리고, 결합 규칙은 L-R(왼쪽에서 오른쪽) 연산이 대부분이고, R-L(오른쪽에서 왼쪽) 연산은 극히 일부입니다.


그룹 

 연산자

결합규칙 

의미

1그룹

::

없음 

범위 연산자

2그룹

. 또는 ->

L-R

멤버 선택(개체 또는 포인터)

 

[ ]

배열 첨자 

 

()

함수 호출 

 

++

후위 증가 

 

--

후위 감소 

 

typeid()

형식 이름 

 

const_cast

상수 형식 변환 

 

dynamic_cast

동적 형식 변환 

 

reinterpret_cast

재해석 형식 변환 

 

static_cast

정적 형식 변환 

3그룹

sizeof

R-L 

개체 또는 형식의 크기 

 

 ++

전위 증가 

 

--

전위 감소

 

~

1의 보수 

 

!

논리 NOT 

 

-

단항 부정 연산자 

 

+

단항 더하기 

 

&

참조 연산자

 

 *

간접 참조 

 

new

개체 만들기 

 

delete

개체 삭제 

 

Cast: ()

캐스팅 연산자

4그룹

.* 또는 ->*

L-R

멤버 포인터(개체 또는 포인터) 

5그룹

*

L-R

곱하기 

 

/

나누기 

 

%

나머지(모듈러스) 

6그룹

+

L-R

더하기 

 

-

빼기 

7그룹

<<

L-R

 왼쪽 시프트

 

>>

오른쪽 시프트 

8그룹

<

L-R

비교 (보다 작음) 

 

>

비교 (보다 큼) 

 

<=

비교 (작거나 같음 )

 

>=

비교 (크거나 같음)

9그룹

==

L-R

비교 (같음)

 

!=

비교 (같지 않음)

10그룹

&

L-R

비트 AND 

11그룹

^

L-R

배타적 비트 OR 

12그룹

|

L-R

포괄적 비트 OR 

13그룹

&&

L-R

논리 AND 

14그룹

||

L-R

논리곱 OR 

15그룹

? :

R-L

조건 (3항 연산자)

16그룹

=

R-L

대입 (할당)

 

*=

곱하기 대입

 

/=

나누기 대입 

 

%=

모듈러스 대입 

 

+=

더하기 대입 

 

-=

빼기 대입 

 

<<=

왼쪽 시프트 대입 

 

>>=

오른쪽 시프트 대입 

 

&=

비트 AND 대입 

 

|=

포괄적 비트 OR 대입 

 

^=

배타적 비트 OR 대입 

17그룹 

throw

R-L

throw 식 

18그룹 

,

L-R

쉼표 


※ 본 우선순위 표는 MSDN문서를 참고했으며, Visual Studio 2015를 기준으로 작성했습니다.