https://kunulee.tistory.com/13
안녕하세요, const 키워드와 constexpr의 차이점에 대한 부분은 다음 포스팅을 참조 하시고
이번에는 const 키워드의 두가지 위치에 대해서 간단하게 살펴 보겠습니다.
const는 상수 선언을 위해 필요한 키워드 입니다.
const는 보통 primitive type의 앞에 위치 하게 됩니다.
const int a = 10;
그러나 포인터의 경우에는 const 를 위치시킬 수 있는 부분이 두가지 입니다.
int a = 10;
const int *fp = &a;
int* const lp = &a;
int a를 선언하고, int * 타입 fp, lp는 a의 주소값을 가리키고 있습니다.
const는 포인터의 앞에 올수 있고 포인터의 뒤에도 올수 있습니다.
1. 포인터의 앞에 const 키워드가 있는 경우
일반적인 const의 의미와 같습니다. fp가 가리키는 값 자체에 대한 상수화를 합니다.
즉, *fp = 10; 와 같은 연산이 불가능 하다는 점이 특징이라고 할 수 있습니다만!
다음과 같은 연산은 가능합니다.
1. a = 20;
2. fp = b;
와 같이 fp에 다른 주소를 넣는다거나 fp가 가리키는 변수의 값을 직접 바꾸는 작업이 가능합니다.
2. 포인터의 뒤에 const 키워드가 있는 경우
이 선언은 포인터 자체에 const 효과를 적용하는 방법으로 lp 포인터의 주소값을 변경할 수 없도록 상수화 시킵니다.
즉, fp = b; 와 같이 fp 포인터를 다른 주소값으로 변경하는 것이 불가능해 집니다만!
*fp = 10; 과 같은 연산은 가능합니다. 포인터의 주소값에 상수화를 했지,
포인터의 주소값에 해당하는 실제 값은 상수화 하지 않았으니까요,
그렇다면 이 모든것을 상수화 하고 싶다면 어떻게 해야 될까요?
int a = 10;
const int * const ap = &a;
네 맞습니다. 앞뒤에 전부 const 를 기입 하면 되겠네요
복잡하지만, 확실한 방법이므로 소개해드립니다.
'프로그래머의 프로그래밍 이야기 > C++ Programming' 카테고리의 다른 글
C++ 오버로딩 다양한 사용법 정리 (1) | 2022.06.20 |
---|---|
C/C++ const/constexpr 키워드 사용법, 차이 (0) | 2022.06.14 |
C++ noreturn 이란 (0) | 2022.02.07 |
댓글