// int형 변수 num을 상수화constint num = 10;
// 상수만을 가리키는 포인터. 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없다. // 가리키는 대상은 변경이 가능하지만(ptr1=&val2;), 가리키는 값은 변경할 수 없다. constint * ptr1 = &val;
// 포인터 ptr2가 상수화 된다. 정수형 변수를 가리키는 상수형 포인터. // 포인터가 가리키는 대상은 변경할 수 없고, 가리키는 값은 변경이 가능하다(*ptr2=100;)int * const ptr2 = &val;
// 가리키는 대상 및 값의 변경이 불가능하다.// 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없다.constint * const ptr3 = & val;
// 이 함수 내에서는 멤버 변수에 저장된 값을 변경하지 않는다.// const함수 내에서는 const가 아닌 함수의 호출이 제한된다.voidfunc(int a)const
참조자(Reference)
참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름이다. 변수로 봐도 무리는 없다.
참조자의 수에는 제한이 없으며, 참조자를 대상으로도 참조자를 선언할 수 있다.
변수만 참조가 가능하고 미리 선언이 불가능 하며 NULL로 초기화도 불가능 하다.
참조자를 통해서 포인터 연산 없이 힙 영역에 접근할 수 있다.
// 참조자의 예int num1=10;
int &num2 = num1;
int &num3 = num2;
int &num3 = num1;
// 포인터 연산 없이 힙 영역에 접근int * ptr = newint;
int &ref = *ptr;
참조자와 함수
참조자를 이용한 Call-by-reference
voidSwap(int &ref1, int &ref2){
int tmp = ref1;
ref1 = ref2;
ref2 = tmp;
}
const 참조자
const int &ref : 참조자 ref를 이용한 값의 변경은 하지 않겠는 뜻이다.
void func(const int &ref) { }
함수 내에서, 참조자를 통한 값의 변경을 진행하지 않을 경우, 참조자를 const로 선언하는것이 좋다.
함수의 원형만 봐도 값의 변경이 이뤄지지 않음을 알 수 있게 한다.
const 참조자의 상수 참조
const int &ref = 30;
임시변수라는 것을 만들어 상수 30을 저장하고 참조자가 이를 참조하게 하여 사용할 수 있게 된다.