Reference Variable
(c++11, L-value reference)
L-value, 기존 메모리 공간(변수)에 대한 별명을 만들어 변수처럼 쓴다,
별명만 붙이는 것이기 때문에, 메모리 주소는 동일한 공간을 쓴다
Reference(참조)라는 뜻에서 알 수 있듯이, 어떤 변수를 참조하게 만들어 준다
typedef 와 는 다르다(typedef는 자료형에 별명을 주는것)
선언법
자료형& 레퍼런스식별자 = 변수;
pass by reference 를 할때 포인터 대신에 사용할 수 있다,
하지만 포인터와는 다르다, 구지 포인터를 Reference Variable과 비슷하게 쓴다면
자료형 * const ptr = &변수;
와 비슷한 모양이다, 즉 선언시에 정해진, 가리키고 있는 변수의 주소를 수정 할 수 없다
그러나 포인터는 주소가 가리키는 값에 접근하기 위해 indirection operator(역참조)* 를 사용하지만
Reference Variable은 역참조를 쓸 수 없다,
int main()
{
int a = 8;
int &a_ref = a; // 포인터와 다르게 &a 로 대입하지 않음
std::cout << a_ref << std::endl; // 결과는 8이 나옴
return 0;
}
R-value Reference
(c++11)
c++11 부터 move semantic 개념이 도입되면서, 기존 refernce variable이
L-value refernce, R-value reference 로 나뉘게 되었다
선언법
자료형&& 레퍼런스식별자 = R-value;
비교 연산자(&&)와는 아무 관련 없음
R-value 만 대입할 수 있다, 즉 식별자가 없는 값들만 대입 할 수 있다.
R-value reference parameter
이때 20번라인 doSomething은 L-value를 인자로 받고
21번라인 doSomething은 R-value를 인자로 받았다
'C++' 카테고리의 다른 글
template _ class template, function template, explicit instantiation (0) | 2020.03.16 |
---|---|
c++ typeid 연산자 (0) | 2020.03.16 |
C++ lvalue, rvalue, xvalue, glvalue, prvalue (0) | 2020.03.12 |
C++ Inheritance (상속) _ 다형성, 업캐스팅, 다운캐스팅 (0) | 2020.03.10 |
C++ Inheritance (상속)_ 상속관계, 접근권한, 생성자,소멸자 순서 (1) | 2020.03.09 |