C/C++에서 const는 "변하지 않는 값"을 정의하는 키워드입니다. 데이터를 실수로 변경하는 것을 방지하여 프로그램의 안정성을 높이고, 컴파일러가 코드를 최적화하는 데 도움을 줍니다
변수를 선언할 때 앞에 붙이면, 그값은 초기화 이후에 수정할 수 없는 상수가 된다.
const int MAX_VAL = 100;
// MAX_VAL = 200 // 컴파일 에러
#include <iostream>
using namespace std;
int main()
{
int a = 10, a1 = 15;
const int* ptr1 = &a;
// *ptr1 = 15; // 값 변경 불가
ptr1 = &a1; // 가리키는 대상 변경 가능
int b = 20, b1 = 25;
int* const ptr2 = &b;
*ptr2 = 25; // 값 변경 가능
//ptr2 = &b1; // 가리키는 대상 변경 불가
int c = 30, c1 = 35;
const int* const ptr3 = &c;
//*ptr3 = 35; // 값 변경 불가
//ptr3 = &c1; // 가리키는 대상 변경 불가
return 0;
}
C++에서 함수가 객체의 상태를 변경하지 않음을 보장하는 데 사용됩니다.
객체 지향 프로그래밍(OOP)에서 메서드의 const 수정자는 여러 가지 중요한 이유로 중요합니다:

class Example { private: int value; public: Example(int v) : value(v) {} // 비 const 메서드 int getValue() { return value; // 상태를 변경하지 않음 } };
- 이 경우 getValue()는 단순히 value를 반환하고, 상태를 변경하지 않습니다.하지만 const가 없기 때문에, 호출자는 이 메서드가 상태를 변경하지 않는다는 것을 보장받을 수 없습니다.
class Example { private: int value; int accessCount; // 접근 횟수를 추적 public: Example(int v) : value(v), accessCount(0) {} // 비 const 메서드 - 실제로 상태를 변경함 int getValue() { accessCount++; // 상태 변경! 접근 횟수 증가 return value; } int getAccessCount() const { return accessCount; } };
- 이 경우 getValue()는 value를 반환하지만, 동시에 accessCount를 증가시켜 객체의 상태를 변경합니다.호출자는 단순히 값을 가져오는 것처럼 보이지만, 실제로는 객체의 상태가 변경되고 있습니다.
class Example { private: int value; public: Example(int v) : value(v) {} // const 메서드 - 상태 변경 불가능 int getValue() const { // accessCount++; // 컴파일 에러! const 메서드에서는 상태 변경 불가 return value; } };
- const 메서드를 사용하면 컴파일러가 상태 변경을 막아주므로, 호출자는 이 메서드가 절대로 상태를 변경하지 않는다는 것을 보장받을 수 있습니다.