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를 사용할 경우
- 값이 변경되어야 할 경우(다른 지점 참조)