안녕하십니까. 김동우입니다.
이번에는 생소한 연산자 둘을 소개할까 합니다.
prefix/postfix increment/decrement operator가 되겠습니다.
그럼 코드부터 보시겠습니다.
#include <iostream>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
int x(5);
int y = ++x;
cout << y << '\n' << endl; // output : 6
int x2(5);
int y2 = --x2;
int z = x2--;
cout << y2 << " " << z << '\n' << endl; // output : 4 4
int a = 6, b = 6;
cout << a << " " << b << endl; // output : 6 6
cout << ++a << " " << --b << endl; // output : 7 5
cout << a << " " << b << endl; // output : 7 5
cout << a++ << " " << b-- << endl; // output : 7 5
cout << a << " " << b << '\n' << endl; // output : 8 4
// ++a, --b의 경우 연산의 결과값을 바로 stream에 보내 출력한다.
// a++, b--의 경우 결과값이 아닌 연산 이전의 값을 stream에 보낸 후 이후 출력한다.
int i(1);
//int j(add(i, ++i)); -> 이러한 식의 선언은 문제가 생길 수 있다.
int j(1);
int k(add(i, ++j)); // 이와 같은 형태는 괜찮을 수 있다.
cout << k << '\n' <<endl; // output : 3
int n(1);
n = n++;
cout << n << '\n' << endl; // output : 1
// warning: multiple unsequenced modifications to 'n' [-Wunsequenced] n = n++;
// 이러한 경고문구가 발생할 수 있다. 1을 더하고 싶다면 ++n으로 작성하자.
// 이는 후행연산인 n++에 대해 컴파일러마다 다른 작업순서로 정렬할 수 있다는 경고다.
//공부해보기
int l = 5;
int m = l-- + 10 + --l;
cout << m << endl;
// associativity에 의거, l-- 먼저 연산을 진행한다.
// 단, 후위연산자의 경우 타 연산에 기존 값을 선할당 한 뒤, 감소연산을 처리하기에
// 덧셈 먼저 처리하게 된다.
// 이후 --l 전위연산 감소가 진행된 후에 덧셈 최종값을 결정, m에 대입하게 된다.
// 1. l(=5) + 10 = 15
// 2. l-- -> l(=4)
// 3. --l -> l(=3)
// 4. 15 + 3 = 18
// 5. m에 18을 대입.
// 경고가 발생하는 방식의 코딩이므로 실제 프로젝트에서는 후위연산을 해당 방식으로
// 작성하는 것을 지양해야 한다.
return 0;
}
그럼 이번 글은 여기서 이만 마치도록 하겠습니다. 감사합니다.