written by yechoi

[c++] 참조자 본문

Born 2 Code

[c++] 참조자

yechoi 2020. 8. 27. 22:27
반응형
const
const int num = 10;
# 변수 num을 상수화
const int *ptr1 = &val1; 
# 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음
int *const ptr2 = &val2; 
# 포인터 ptr2가 상수화됨
const int * const ptr3 = &val3; 
# 포인터 ptr가 상수화됐으며, ptr3을 이용해 val3의 값을 변경할 수 없음
 

 

bool

true, false를 나타내는 자료형. true와 false는 참거짓을 표현하기 위한 1바이트 크기의 데이터이나, 출력하거나 정수 형태로 형변환하는 경우에는 각각 1과 0으로 변환되도록 정의돼 있다. bool형 자료형을 선언하는 것도 가능.

 

 

참조자
int num1 = 1020;
int &num2 = num1;

num2는 num1을 참조. 동일한 메모리 공간을 참조한다. 값과 주소값이 모두 같다.

  • 변수를 대상으로 참조해야 하며(배열 요소 또는 포인터 참조 가능, 상수 참조 불가)
  • 참조자를 대상으로 참조자를 선언하는 것도 가능
 
포인터 참조자
int num = 10;
int *ptr = #

int &ref = num;
int *(&pref) = ptr;

ref, *(&pref)값은 모두 10 
 
참조자 call-by-reference
void    Swap(int &ref1, int &ref2)
{
    int temp = ref1;
    ref1 = ref2;
    ref2 = temp;
}
 
참조자 값 변경할 수 없도록 제한하기

참조자의 값이 변하지 않길 원하는 경우 참조자를 const로 선언해야 한다. 함수의 원형만 봐도 이 함수에선 값 변형이 이뤄지지 않는다는 것을 알 수 있게 해야 한다.
void Func(const int &ref) {...}

 
그 밖에 주의할 점
  • 참조자를 반환해야 할 때, 지역변수를 참조해 반환하지 않도록 (소멸되니까)
  • 상수화된 변수에 대한 참조자 선언

     

  • # 참조자를 통해 상수를 변경하려 하므로, 컴파일러가 에러를 띄움
    const int num=20;
    int &ref=num;
    # 올바른 선언 형태
    const int num=20;
    const int &ref=num;
  • const 참조자는 상수 참조 가능 const int &ref = 30;

 

첫인상 자체는 포인터보다 쉽지만, 여러 예외 상황을 제한해 주고 하다보면 포인터를 사용하는 게 더 깔끔할 것 같다는 생각이 든다.

반응형