모던 C++ Lvalues & Rvalues reference

배현성·2022년 11월 25일
0

reference : 포인터와 같이 메모리 어딘가에 위치한 한 개체의 주소를 저장한다.
그러나 포인터와는 다르게, 한번 초기화된 후 다른 개체를 참조하고나 null로 만들 수 없다.

종류

  • lvalue reference : 이름이 있는 변수를 참조. &연산자 참조
  • rvalue reference : 일시적인 객체를 참조. &&연산자 사용

lavue reference

int main()
{
    int a = 8, b = 4;
    // 포인터 p
    int *p = &a;    // p는 a의 주소값을 가리킴.
    std::cout << *p << std::endl;    // 8

    // 포인터는 다른 개체의 주소로 바꿀 수 있음.
    p = &b;
    std::cout << *p << std::endl;    // 4
    
    // lvalue참조 r
    // 포인터는 주소값을 저장하지만, lvalue참조는 변수를 지정해줌
    // 초기화할 때 해당 변수의 주소값을 lvalue참조가 내부적으로 가지고 있음.
    int &r = a;    // a에 대한 참조로 초기화.
    std::cout << r << std::endl;    // 8
    std::cout << a << "," << b << std::endl;    // 8,4

    // lvalue참조는 초기화할 때만 그 주소를 저장하기 때문에
    // 이 대입은 r이 b의 변수를 참조하게 하는 것이 아니라
    // r이 참조하고 있는 a의 값 자체를 변화시키는 것
    r = b;         
    std::cout << r << std::endl;    // 4
    std::cout << a << "," << b << std::endl;    // 4,4

    return 0;
}

reference

profile
platform optimazation engineer

0개의 댓글