C++에서는 변수를 선언할 때 자료형 앞에 const 한정자(qualifier)를 붙여 상수를 정의할 수 있습니다. const로 선언된 변수는 초기화 이후 값을 변경할 수 없으며, 변경을 시도하면 컴파일 오류가 발생합니다.
예제
#include<iostream>
using namespace std;
int main() {
const int x = 9;
x = 0; // 컴파일 오류 발생
return 0;
}위 코드는 상수 변수 x를 정의합니다. 그러나 상수로 선언된 값에 새로운 값을 다시 할당하려고 하기 때문에 컴파일러가 오류를 발생시킵니다. 즉, const 변수는 반드시 선언과 동시에 초기화해야 합니다.
constexpr을 활용한 상수 정의
C++11부터는 컴파일 타임 상수를 정의할 때 constexpr 키워드를 사용할 수 있습니다. constexpr은 해당 값이 컴파일 시점에 결정됨을 보장하므로, 배열 크기 지정 등 컴파일 타임 상수가 필요한 경우에 유용합니다.
constexpr int MAX_SIZE = 100;
#define 매크로와의 비교
전통적인 C 스타일에서는 전처리기 매크로인 #define으로 상수를 정의하기도 했습니다.
#define PI 3.14159
하지만 #define은 타입 검사가 이루어지지 않고 스코프 개념이 없어 디버깅이 어렵습니다. 따라서 현대 C++에서는 타입 안정성이 보장되는 const 또는 constexpr을 사용하는 것이 권장됩니다.