Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 복합 할당 연산자 완벽 정리: 종류와 사용법

C++의 복합 할당 연산자(compound assignment operator)e1 op= e2 형태로 표현됩니다. 여기서 e1은 const 타입이 아닌, 수정 가능한 l-value여야 하며 e2는 다음 중 하나여야 합니다.

  • 산술 타입(arithmetic type)
  • 포인터 타입 — 단, 연산자(op)가 + 또는 -인 경우에 한함

e1 op= e2e1 = e1 op e2와 동일하게 동작하지만, 결정적인 차이점은 e1단 한 번만 평가된다는 것입니다. 덕분에 코드가 더 간결해지고, 부작용(side effect)이 중복으로 발생할 위험도 줄어듭니다.

C++ 복합 할당 연산자의 종류

C++에서 제공하는 복합 할당 연산자는 다음과 같습니다.

연산자설명
*=첫 번째 피연산자의 값에 두 번째 피연산자의 값을 곱한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
/=첫 번째 피연산자의 값을 두 번째 피연산자의 값으로 나눈 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
%=첫 번째 피연산자를 두 번째 피연산자의 값으로 나눈 나머지(모듈러스)를 구한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
+=첫 번째 피연산자의 값에 두 번째 피연산자의 값을 더한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
-=첫 번째 피연산자의 값에서 두 번째 피연산자의 값을 뺀 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
<<=첫 번째 피연산자의 값을 두 번째 피연산자 값이 지정하는 비트 수만큼 왼쪽으로 시프트한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
>>=첫 번째 피연산자의 값을 두 번째 피연산자 값이 지정하는 비트 수만큼 오른쪽으로 시프트한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
&=두 피연산자의 비트별 AND 연산을 수행한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
^=두 피연산자의 비트별 배타적 OR(XOR) 연산을 수행한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.
|=두 피연산자의 비트별 포함적 OR 연산을 수행한 후, 결과를 첫 번째 피연산자가 지정하는 객체에 저장합니다.

예제 코드

주요 복합 할당 연산자들의 실제 동작을 확인해 보겠습니다.

#include<iostream>
using namespace std;

int main() {
    int a = 3, b = 2;

    a += b;   // a = a + b
    cout << a << endl;

    a -= b;   // a = a - b
    cout << a << endl;

    a *= b;   // a = a * b
    cout << a << endl;

    a /= b;   // a = a / b
    cout << a << endl;

    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

5
3
6
3

각 단계마다 a의 값이 갱신되며, 이전 연산의 결과가 다음 연산에 그대로 반영되는 것을 확인할 수 있습니다.

사용 시 주의 사항

복합 할당 연산자를 사용할 때는 다음 사항을 유의해야 합니다.

  • 열거형(enum) 타입에 대한 복합 할당은 컴파일 오류 메시지를 발생시킵니다.
  • 왼쪽 피연산자가 포인터 타입이라면, 오른쪽 피연산자 역시 포인터 타입이거나 0으로 평가되는 상수 표현식이어야 합니다.
  • 왼쪽 피연산자가 정수형(integral type)이라면, 오른쪽 피연산자는 포인터 타입이 아니어야 합니다.

이러한 규칙을 지키면 복합 할당 연산자를 활용해 더 짧고 읽기 쉬운 C++ 코드를 작성할 수 있습니다.