1. 일반 변수
의미를 직역하면 아래의 주석과 같이 말할 수 있지만 사실상 차이가 없습니다.
const int num1 = 0; //num1의 int 형식의 값을 변경할 수 없습니다.
int const num2 = 0; //num2의 값을 변경할 수 없습니다.
num1 = 1; //ERROR!!!
num2 = 1; //ERROR!!!
2. 포인터
포인터의 경우에는 다릅니다.
int num = 0;
const int* ptr1 = # // ptr1이 가리키고 있는 int형 값을 바꿀 수 없다,
int* const ptr2 = # // ptr2의 값(int형 주소)을 바꿀 수 없다.
const int* const ptr3 = # // 둘다 바꿀 수 없다.
3. 레퍼런스(참조자)
일반변수에서의 의미와 유사합니다.
참조자가 논리적으로는 변수의 별칭이라는 의미를 생각해 보면 쉽게 이해할 수 있습니다.
int num1 = 0;
const int& ref1 = num1; //ref1의 int형 값을 변경할 수 없다.
int const& ref2 = num1; //ref2의 값을 변경할 수 없다.
int& const ref3 = num1; //ref3 처럼 사용하진 않는다. 참조자는 포인터와 다르게 참조 대상을 바꿀 수 없다.(의미없음)
ref1 = 1; //ERROR : ref1의 int형 값에 const가 있으므로 변경불가하다.
ref2 = 2; //ERRPR : 레퍼런스 변수를 선언할 때 &를 붙이고 사용할 땐 일반변수처럼 쓰므로 ref2의 값은 변경불가.
ref3 = 3; //컴파일러에 따라 다르다.
'C++' 카테고리의 다른 글
어떤 경우에 포인터를 쓰는 것 보다 참조자를 쓰는 것이 적합할까? (0) | 2024.02.25 |
---|---|
포인터와 레퍼런스(참조자)의 상호 변환 (0) | 2024.02.25 |