안녕하세요
warehouse입니다.
오늘은 const 의 개념에 대해 알아 봤습니다.
그동안 아무 생각없이 const 는 그저 상수의 개념 정로도 이해하고 사용했었는데요
조금은 더 알고 써야하지 않을까 라는 생각에 가볍게 리서치 한 내용을 남겨봅니다.
변경할 수 없는 변수, 상수 const
const 라는 예약어 이름 자체는 constant 라는 단어에서 왔으며 말 그대로 상수를 의미합니다.
constant
형용사
1.
a.불변의, 일정한(opp. variable)at constant temperature[speed] 일정한 온도[속도]로
b.끊임없이 계속하는, 지속적인, 부단한be in constant pain 통증이 계속되다
c.[문어] 충실한, 절개가 굳은(faithful), 견실한 ((in)); [P] 끝까지 지키는(true) ((to))He is constant in his love for her. 그녀에 대한 그의 사랑은 한결같다.
명사
1.일정불변의 것; [수학·물리] 상수, 불변수[량]; 율; [논리] 정항(定項); [교육] (중등 교육 과정의) 필수 기초 과목
출처 : 네이버 사전
그래서 보통은 아래처럼 상수를 표현할 때 많이 사용하곤 합니다.
const int a = 10;
a = 3; // Error
const 로 선언한 변수의 경우 read-only memory 에 저장되어 변경이 불가하게 됩니다.
저장되는 메모리 영역의 경우 컴파일러에 따라 조금 다를 수 있으며, data segment 또는 code segment에 저장된다고 이해하면 될 것 같습니다.
결국, 코드에서 한번 설정해서 계속 사용하고 싶은 값이 있는 경우 const로 선언하여 값을 할당하면 됩니다.
저 같은 경우 코드 수정 시 실수로 값이 변경되는 경우를 방지하기 위해서 사용하는 것 같습니다.
그런데 const를 사용해도 값을 변경할 수 있는 경우가 생길 수 있는데요, 그것은 pointer에 사용하는 경우입니다.
값의 변경을 허용하지 않는 포인터 변수
아래와 같이 const pointer를 정의하였을 때, pointer가 가리키는 값을 변경하지 않겠다는 것을 의미합니다.
변수가 가리키는 주소의 변경은 허용하되, 주소 가 가진 값에 대한 변경은 허용하지 않습니다.
#include <iostream>
using namespace std;
int main() {
int val = 10;
const int *a = &val;
// 10
cout << *a << endl;
int new_val = 20;
a = &new_val;
// 20
cout << *a << endl;
// error: read-only variable is not assignable
//*a = 5;
return 0;
}
에러가 나타나는 부분은 주석처리하여서 아래와 같은 결과를 얻을 수 있습니다.
$ ./a.out
10
20
C++의 const 키워드를 이용하여 변수의 변경을 방지하는 방법을 알아 보았습니다.
사실 코드를 짜면서 실수를 하지 않는다면 const가 정말 필요할까? 라는 생각도 해 봅니다.
실수를 막고 runtime에 값이 변경되지 않기 위해서 만들어진 const
미리 알아두고 여러 상황에서 사용연습을 하다보면 읽고 쓰는데 점점 익숙해 질 것이라 생각합니다.
참고자료
https://www.quora.com/Where-is-a-C++-const-variable-stored-in-memory
'C++' 카테고리의 다른 글
[C++] nullptr과 NULL차이 - nullptr 조건문 사용시 주의사항 (0) | 2024.03.19 |
---|---|
C와 C++이 백악관에서 더 이상 사용하지 않게 된 이유 (0) | 2024.03.17 |
[C++/STL] vector의 크기, length 를 구하는 방법 (0) | 2021.11.29 |
C++ 에서 구조체를 초기화 하는 여러가지 방법 (0) | 2021.07.29 |
[Effective C++] 상속받은 비가상 함수를 파생클래스에서 재정의 하지 말자 (0) | 2021.06.11 |