C++ - constexpr

C++11 부터 constant expression 약자로 constexpr 키워드를 const의 확장된 기능을 지원하고 있다.

이 기능의 특징은 상수 + 컴파일 시간에 계산을 강제할 수 있는 최적화 용도의 키워드다. 컴파일 시간에 계산할 수 있으므로 최적화 용도로 사용된다.

상수 const 에서는 런타임 도중 값을 계산하고 일회성 대입이 가능하나, constexpr 컴파일에 미리 계산하고 값이 고정되어 런타임에서 변경할 수 없다.


코드 활용 예시

  • 배열 크기
  • 상수 테이블 작성
  • 컴파일 시간에 결정이 필요한 수학 계산
  • 템플릿 타입 결정

함수, 값에서의 사용

constexpr 은 상수에 값을 붙일 수 있을 뿐 아니라 함수에도 키워드를 붙일 수 있다.

함수에 붙인 경우와 값에 붙인 경우의 차이

  • 값에 붙이면 컴파일 시간에 값이 결정됨
  • 함수에 붙이면 컴파일 시간에 결과를 계산함 (타입 결정에 유용)

이러한 특징으로 코드의 안전성과 최적화에 도움이 된다.


신규로 추가되고 있는 확장기능

C++11 부터 지속적으로 constexpr 관련 기능들이 추가되고 있다.
기능 요약은 다음과 같다.

  • const: 변경 불가한 변수, 런타임으로 상수 지정
  • constexpr: 컴파일 타임에 상수 결정, 컴파일 + 런타임 대응
  • consteval: 컴파일 타임에 상수 결정, 단 런타임에서는 지정 불가
  • constinit: 초기화만 컴파일 타임에 상수로 동작, 런타임에서는 변수처럼 사용 가능