C++ const 개념정리

1 minute read

Const

● 상수 포인터

주소를 바꿀 수 없도록 되어있다.

int value = 5; int* const ptr = &value;
*ptr = 10; // ok! can change non-const value
value = 10; // ok!
//ptr = &value2; // error! can't change pointer address

ptr의 주소를 변경하려고 하면 오류를 발생시킨다. 포인터가 상수이기 때문에 포인터 값을 변경할 수가 없다. 하지만 포인터가 상수이지 포인터가 가리키는 값은 상수가 아니기 때문에 *ptr=10과 같이 포인터가 가리키는 값을 변경하는 것은 가능하다.

● 상수를 가리키는 상수 포인터

앞서 본 2가지 케이스를 합친 혀애로 포인터가 가리키는 값도 상수이며 포인터 또한 상수로써 가리키는 값을 바꾸거나 다른 주소를 가리키도록 수정 할 수 없다.

int value = 5; const int* const ptr = &value;
//*ptr = 10; // error! can't change const value
value = 10; // ok!
//ptr = &value2; // error! can't change pointer address

이처럼 const의 위치에 따라 동작하는 방식이 다르기 때문에 이를 유의해서 사용하는 것이 중요하다.

● 요약

상수를 가리키는 비 상수 포인터는 가리키는 값을 수정 불가능하지만 다른 변수를 가리키도록 자신의 주소를 바꿀 수 있다. 일반 변수를 가리키는 상수 포인터는 자신이 가리키는 주소를 수정 할 수 없지만 포인터가 가리키는 값을 변경 할 수 있다. 상수를 가리키는 상수 포인터는 자신이 가리키는 주소를 수정 할 수 없고 포인터가 가리키는 값도 수정 할 수 없다.

int value = 5;
const int* ptr1 = &value; // ptr1으로 value값 수정불가능(상수), 주소값 변경 가능
int* const ptr2 = &value; //  ptr2으로 value값 수정 가능, 주소값 변경 불가능(상수포인터)
const int* const ptr3 = &value; // ptr3으로 value 값 수정 불가능(상수), 주소값 변경 물가능(상수 포인터)

참고 블로그 - https://dydtjr1128.github.io/cpp/2020/01/08/Cpp-const.html

정리 및 느낀점

우선 위에 정리한 내용은 참고 블로그 내용을 따라 적으면서 공부한 내용이어서 자세한 내용은 위 링크를 통해 들어가면 깔끔하게 정리되어 있다.
이 포스트는 내가 공부하면서 막 쓰는 글이어서 그리 깔끔하지는 못하고 몇 번 수정하면서 다듬을 계획이다.

Tags:

Categories:

Updated:

Leave a comment