이태홍
홍'story
이태홍
전체 방문자
오늘
어제
  • 분류 전체보기 (171)
    • TW (39)
    • AI (47)
      • 자연어 처리 (10)
      • Kaggle (2)
      • Machine Learning (26)
      • Computer Vision (0)
      • Deep Learning (0)
      • ROS2 (7)
    • Computer Science (29)
      • Data Structure (0)
      • Algorithm (18)
      • Computer Architecture (5)
      • SOLID (0)
      • System Programing (6)
    • LOLPAGO (10)
      • 프론트엔드 (10)
      • 백엔드 (0)
    • BAEKJOON (2)
    • React (5)
    • 언어 (8)
      • C++ (8)
    • GIT (0)
    • MOGAKCO (19)
    • 미국 여행기 (3)
    • etc. (7)
      • Blog (2)
      • 콜라톤 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ML
  • 기계학습
  • kaggle
  • algorithm
  • 백준
  • C++
  • 머신러닝
  • tw
  • Ai
  • baekjoon
  • pytorch
  • 경사하강법
  • LOLPAGO
  • 딥러닝
  • react
  • 알고리즘
  • NLP
  • computerscience
  • computer architecture
  • ROS2

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이태홍

홍'story

[C++] 레퍼런스(Reference)
언어/C++

[C++] 레퍼런스(Reference)

2022. 10. 26. 20:32

🤔 레퍼런스

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
    '언어/C++' 카테고리의 다른 글
    • [C++] 동적 메모리 할당
    • [C++] C++언어에서 지원하는 C언어의 문법
    • [C++] Namespace
    • [C++] 생성자/소멸자
    이태홍
    이태홍
    공부하자 태홍아

    티스토리툴바