🤔 레퍼런스
C++의 가장 큰 특징이라고도 할 수 있는 레퍼런스에 대해 배워보겠습니다.
중간고사를 대비하여 정리한 내용이기 때문에 내용이 매우 부실할 수 있습니다.
기회가 된다면 C++언어에 대해 제대로 알아보는 시간을 갖도록 하겠습니다.
해당 포스팅은 장진수 교수님의 객체지향설계 과목을 수강하며 작성한 내용임을 알립니다.
🔎 선언과 초기화
아래의 코드에서 change_val()함수에 레퍼런스를 사용한 것을 알 수 있습니다.
인자인 number을 파라미터로 가지고 오는 것이기 때문에 아래와 같이 이해할 수 있습니다.
int &p = number;
레퍼런스는 해당 변수의 별명이라고 생각하면 좋습니다.
🔎 lvalue and rvalue
lvalue는 대체적으로 대입연산자의 좌측에 존재하는 값으로 주소에 메모리를 가지고 있습니다.
rvalue는 대입연산자의 우측에 존재하는 값으로 일시적인 값이며 대입 연산자의 좌측에 존재할 수 없습니다.
rvalue는 일시적인 값으로 const reference만을 가질 수 있습니다.
아래의 코드에서 lvalue는 &ref와 a가 lvalue이며 4는 rvalue입니다.
const qualifier은 값을 더이상 변하게 할 수 없다는 뜻이므로 레퍼런스 변수에 대입할 수 없습니다.
🔎 레퍼런스와 배열
위에서 알아본 코드처럼 레퍼런스에 어떠한 값을 직접 할당하는 것은 C++에서 지원하지 않습니다.
그래서 배열을 생성한 뒤 해당 값을 레퍼런스 변수에 전달하는 방식을 사용합니다.
위의 코드에서 알 수 있듯이 레퍼런스 배열을 만들기 위해서 (&ref)와 같이 괄호를 사용하여 생성해야 합니다.
이차원 배열도 마찬가지로 괄호를 이용하여 만들면 됩니다.
🔎 레퍼런스와 함수
함수를 선언할때도 마찬가지로 레퍼런스를 이용할 수 있습니다.
아래와 같은 코드를 이용하면 func(x)는 일시적인 값인 rvlaue이기 때문에 증감연산자를 사용할 수 없습니다.
그렇기 때문에 해당 함수가 반환하는 값을 rvalue로 만들어야 합니다.
이는 함수의 데이터 타입을 레퍼런스타입으로 만들어 주면 됩니다.
아래의 코드와 같이 int& func() 함수의 데이터 타입은 레퍼런스타입으로 func(x)++을 하더라도 컴파일에러가 나지 않는것을 알 수 있습니다.
인자로 사용된 x의 값을 레퍼런스타입의 매개변수로 전달받았으므로 x의 값도 함께 증가한 것을 알 수 있습니다
🔎 lvalue와 rvalue 레퍼런스
아래 코드의 주석 부분을 보면 a.return_x();는 상수이기 떄문에 컴파일 에러가 발생합니다.
이 오류를 해결하기 위해 err의 데이터 타입을 const int&로 바꿔주면 됩니다.
'언어 > C++' 카테고리의 다른 글
[C++] 동적 메모리 할당 (0) | 2022.10.27 |
---|---|
[C++] C++언어에서 지원하는 C언어의 문법 (0) | 2022.10.26 |
[C++] Namespace (0) | 2022.10.26 |
[C++] 생성자/소멸자 (0) | 2022.10.26 |
[C++] 클래스, 함수 오버로딩 (0) | 2022.10.26 |