포스트

[C++] constexpr 키워드

[C++] constexpr 키워드

C++ constexpr 키워드 정리

1. constexpr 키워드란?

constexpr 키워드는 C++11부터 도입된 키워드로, 컴파일 시간에 값을 결정할 수 있는 상수를 만들거나, 컴파일 타임에 실행될 수 있는 함수를 정의할 때 사용된다.

2. 기본 개념

constexpr“컴파일 타임 상수(constant expression)” 를 의미한다. 즉, 컴파일러가 프로그램을 빌드할 때 값을 계산해서 상수로 결정하도록 보장하는 것이다.

1
constexpr int size = 10;  // 컴파일 시간에 '10'으로 확정

위 코드에서 size컴파일 시점에 값이 결정되므로, 일반적인 const보다 더 강력한 상수 표현이다.

3. const와 constexpr의 차이

구분constconstexpr
초점값 변경 불가컴파일 시간 상수 보장
값 결정 시점실행 시간(런타임)일 수도 있음컴파일 시간(빌드 타임)
초기화 값런타임 변수로도 초기화 가능반드시 컴파일 타임 상수여야 함
함수에 적용 가능불가컴파일 타임에 실행될 수 있는 함수 작성 가능

예제 비교

1
2
3
4
5
6
const int x = 10;           // 런타임 상수일 수도 있음
constexpr int y = 10;       // 컴파일 타임 상수

int n;
const int z = n;            // 가능 (런타임 상수)
constexpr int w = n;        // 컴파일 오류 (컴파일 타임에 결정 안됨)

4. constexpr 변수

(1) 컴파일 시간에 값이 결정되어야 함

1
2
3
constexpr int size = 100;  // O
int n = 100;
constexpr int size2 = n;   // X, n은 런타임 변수이므로 오류

(2) 배열 크기 등에 활용

1
2
constexpr int size = 5;
int arr[size];  // O, 컴파일 타임 상수라 배열 크기로 사용 가능

5. constexpr 함수

컴파일 시간에 결과가 결정될 수 있는 함수를 만들 때 사용된다.

(1) 선언 및 사용 예시

1
2
3
4
5
constexpr int square(int x) {
    return x * x;
}

constexpr int result = square(5);  // 컴파일 타임에 계산됨

(2) 함수의 조건

  • 함수 내의 모든 내용이 컴파일 타임에 평가될 수 있어야 함.
  • 리턴값이 컴파일 타임 상수로 사용될 수 있어야 함.

(3) 런타임에도 호출 가능

constexpr 함수는 컴파일 타임뿐 아니라 런타임에서도 사용 가능하다.

1
2
3
int n;
std::cin >> n;
int res = square(n);  // 런타임 계산도 가능

6. constexpr과 const 함께 사용

1
constexpr const int x = 10;
  • constexpr만 써도 사실상 const의 의미가 내포되어 있기 때문에 대부분의 경우 constexpr만 써도 충분하다.

7. 활용 예시

(1) 배열 크기, 상수 표현

1
2
constexpr int arraySize = 10;
int arr[arraySize];  // 컴파일 타임에 배열 크기 확정

(2) 템플릿 인자

1
2
3
4
5
6
7
template<int N>
struct Array {
    int data[N];
};

constexpr int getSize() { return 5; }
Array<getSize()> arr;  // 컴파일 타임에 결정됨

8. 주의사항

  • 모든 constexpr 초기화 값은 반드시 상수 표현식이어야 한다.
  • 복잡한 함수도 constexpr로 만들 수 있지만, 조건문, 반복문 등은 C++14 이후부터 허용된다.

9. 요약 정리

용도설명
변수컴파일 타임 상수로 결정될 수 있는 값 설정
함수컴파일 타임에 실행될 수 있는 함수 정의
배열 크기배열 크기 등 컴파일 타임 상수 필요할 때 활용
템플릿 인자컴파일 시점에 결정되어야 하는 값 전달

10. 결론

constexpr은 “이 변수, 함수의 결과를 컴파일 시간에 확정짓겠다”라는 의미이다. 컴파일 타임 상수가 필요할 때 적극 활용하면 코드 안전성과 최적화에 도움이 된다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.