Computing

[문법] 대입 연산자의 반환 (Return 값) 본문

Programming/C++

[문법] 대입 연산자의 반환 (Return 값)

jhson989 2023. 12. 17. 09:40

항상 헷깔리고 까먹어서 정리한다.
 
=, +=, -=, *= 등과 같은 대입 연산자 (Assignment operator, 대입문, 할당문, Assignment statement)는 대입 연산자의 왼쪽 operand의 reference가 반환된다 [1,2].
 

int a, b, c;

a = 10  // 반환값: reference of a (10)

a = b = 20 // a = (b = 20) --> a = 20

(c = 10) = 30 // 1. (c=10)가 c의 reference를 반환하기에 최종 c=30이 됨

std::cout << a << " " << b << " " << c << std::endl; // 20 20 30

 
이러한 대입 연산자의 특성에 의해 다음 두 가지 코드 구현이 가능하다. 가능하다고 좋다는 것은 아니고, 특히 2번의 경우는 사용이 지양된다고 한다[3]. (그래도 이전 레거시 코드를 읽다보면 어쩌다 한번쯤은 만나보게 되더라)
 

/* *******************************************
 * 1 여러 변수 한줄에 대입하기
 * *******************************************/
int a, b, c, d, e, f;
a = b = c = d = e = f = 1

 

/* *******************************************
 * 2 assignment in if statement
 * *******************************************/
 
int getErrorCode() {
    if (/* error 발생 */) {
        return 어떤 에러코드
    } else {
        return 0; // 에러 없음
    }
}
 
int main (void) {
    int error;
    if ( error = getErrorCode() ) {
        printf("Error occurred!!");
    }
}

 
 

Reference

[1] C++ — ISO/IEC 14882:2003(E)
[2] https://learn.microsoft.com/en-us/cpp/cpp/assignment-operators?view=msvc-170#result-of-assignment-operators
[3] https://stackoverflow.com/a/17681782/13276100