따배씨++ (3.3 Increment/Decrement)

김동우·2021년 4월 9일
0

안녕하십니까. 김동우입니다.

이번에는 생소한 연산자 둘을 소개할까 합니다.

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;
}

그럼 이번 글은 여기서 이만 마치도록 하겠습니다. 감사합니다.

0개의 댓글

관련 채용 정보