Develog
const와 constexpr 본문

1. 상수
상수는 변수와 달리 고정된 값을 다루기 위해 사용되는 개념입니다.
상수로 정의된 값은 코드가 실행되는 동안 변경되지 않는다는 것을 보장할 수 있기 때문에 데이터의 신뢰성을 높일 수 있습니다.
이 때문에 원주율(PI), 랜덤 확률 등과 같이 코드 내에서 고정적으로 사용되는 공통 값을 다룰 때는 상수로 정의하여 가독성을 높이는 방안을 주로 사용합니다.
C++에서는 이 상수를 다룰 때 const와 constexpr이라는 두 가지 접근성을 보장합니다.
여기서는 const와 constexper이 어떻게 다른지 간략히 살펴봅니다.
2. const
먼저 const는 변수와 함께 사용되며 const는 함수나 생성자를 정의할 때는 사용되지 않습니다.
const를 통해 정의된 값은 컴파일 타임 또는 런타임에 값이 결정됩니다.
이 때문에 코드를 작성할 때 const를 이용해 변수를 선언하면 그와 동시에 값을 정의해야 합니다.
값이 한 번 정의되면 그 이후로는 변경이 불가능하며, static_cast를 이용하는 극단적인 예외 상황을 제외하면 읽기 전용으로만 사용될 수 있습니다.
const int x = 10;
const int y; // ERROR!!
3. constexpr
constexpr은 const보다 더욱 엄격하게 다루어집니다.
const가 컴파일 타임 또는 런타임 단계에서 값이 결정되었다면, constexpr은 항상 컴파일 타임에 값이 결정됩니다.
이 때문에 (어차피 런타임 단계에서는 const, constexpr 모두 값이 결정되므로) 모든 constexpr은 const의 하위호환이라고 정의할 수 있습니다.
이와 더불어 constexpr은 변수만이 아니라 함수나 생성자에서도 사용이 가능합니다.
또한 컴파일 타임에 값이 결정된다는 것이 보장되기 때문에 템플릿 인자, 배열의 크기 등 정적인 요소에도 사용하는 것이 가능합니다.
constexpr int getFive() {
return 5;
}
constexpr int val = getFive();
int arr[val];
constexpr double PI = 3.141592;
수고하셨습니다!
'Technology > C++' 카테고리의 다른 글
| catch2, Undefined symbols for architecture 에러 극복기 (0) | 2025.08.25 |
|---|---|
| 템플릿 클래스의 람다식 형식 추론 (0) | 2025.08.20 |
| C++의 포인터 (0) | 2025.08.03 |
| static_assert와 non-type template (0) | 2025.07.30 |
| strcpy() 와 strncpy() (0) | 2025.07.14 |