C++

[C++] 참조

yisj 2023. 11. 22. 12:13

참조는 이미 존재하는 객체의 alias이다.

참조에는 두 종류가 있다
 - lvalue 참조
 - rvalue 참조

T의 lvalue 참조 : T&
T의 rvalue 참조 : T&&

참조를 초기화하는 것을 reference binding이라 한다.

lvalue와 rvalue 참조는 바인딩 속성에서 차이가 있다.(어떠한 종류의 객체 타입이 바인딩 될 수 있는지)

대부분의 경우에는 lvalue 참조가 사용된다

rvalue 참조는 이동 생성자, 이동 대입 연산의 경우에 사용된다.

int x;
int& y = x; // y: lvalue 참조
int&& tmp = 3; // tmp : rvalue 참조

int i = 42;
int& j = i;
assert(j == 42);

 

참조와 포인터의 차이: 비슷하지만 다르다!

참조는 반드시 무언가를 참조해야 하지만, 포인터는 nullptr 값을 가질 수 있다.
참조는 다시 바인딩 될 수 없지만, 포인터는 다른 지점을 가리키도록 할 수 있다.

포인터는 사용되기 위해서 반드시 dereferenced 되어야 하지만, 참조는 그럴 필요가 없다.

포인터의 사용은 메모리 관리를 요구한다

특별한 이유가 없다면 참조를 쓰는 것이 좋다
 -  nullptr를 사용할 경우
 - 값이 변경되어야 할 경우(다른 지점 참조)