출처 : C++ 실력 완선 올인원 패키지 Online (fastcampus)
연산자 우선순위와 결합성
#include <iostream>
using namespace std;
int main()
{
{
// 연산자의 우선 순위
// "/" 연산자가 "-" 연산자보다 우선 순위가 높아 먼저 계산 된다.
int num = 40 - 32 / 2;
cout << num << endl;
}
{
// 연산자의 결합성
// 우선순위가 같은 연산자들끼리는 결합성의 방향에 따라 계산을 한다.
// 8 / 2 / 2 * 2 -> 나눗셈, 곱셈은 우선순위가 같고 결합성은 왼쪽에서 오른쪽
// 4 - 6 + 2 + 8 -> 뺄셈, 덧셈은 우선순위가 같고 결합성은 왼쪽에서 오른P
int num = 4 - 6 + 2 + 8 / 2 / 2 * 2;
cout << num << endl;
int a, b, c;
// 할당 연산자는 결합성이 오른쪽에서 왼쪽. 할당 후 할당 된 값을 반환한다.
a = b = c = 10;
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
💥🚫하나의 식에서 하나의 변수를 두 번 이상 변경할 때 주의해야 함!
시퀀스 포인트(sequence point)는 연산의 순서를 보장하는 것; 대표적인 것이 세미콜론(;). 함수 호출 연산자, 쉼표 연산자 등
시퀀스 포인트 MS
{
// 정의되지 않은 행동
// 시퀀스 포인트 이전에 같은 변수를 변경하는 행동은 주의
// 세미콜론은 대표적인 시퀀스 포인트
int num = 10;
cout << ++num + num++ << endl; // 정의되지 않은 행동 ~ 22 인경우도 있고, 23인 경우도 있음.
cout << num << endl;
printf("%d %d\n", ++num, ++num); // 정의되지 않은 행동
printf("%d\n", num);
}