int main()
{
const int num1 = 10;
// int &ref1 = num1;
const int& ref2 = num1;
}
ref1
의 경우 const 변수의 값을 바꾸는걸 허용해주는 것이기에 에러가 난다.
const 변수는 const 참조자만 선언할 수 있다.
const 참조자는 참조자를 통한 값 변경을 허용하지 않는다.
const int& ref = 30;
30이라는 리터럴 상수로 참조자를 초기화 할 수 있다. 이는 변수로만 참조자를 초기화 할 수 있다는 것을 위배한다.
위와 같은 식이 성립하는 이유는 const 참조자를 상수로 초기화할 때 c++은 상수를 메모리상에 남기기 위해 임시변수에 상수를 할당한다. 그리고 const 참조자가 그 임시변수를 참조하도록 하기 때문에 결과적으로 변수를 참조하게 된다.
int Adder(const int& num1, const int & num2)
{
return num1 + num2;
}
Adder
함수를 호출할 때 상수도 매개변수로 넘길 수 있기 때문에 Adder(30, 20)
으로 호출할 수 있다.
물론 Adder(num1, num2)
로 호출할 수 있다.
const int num = 12;
1. 포인터 변수 선언
const int* ptr = #
-> *ptr을 통해 값 변경 허용을 하면 안되기 때문에const int *(&ref) = ptr;
-> const int 형의 참조자는 const int 형으로 맞춰줌cout << *ptr << *ref;