C++

const 위치에 따른 차이점

아이언하트 2024. 2. 25. 11:19

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; //컴파일러에 따라 다르다.