C++ - constexpr
C++11 부터 constant expression 약자로 constexpr 키워드를 const의 확장된 기능을 지원하고 있다.
이 기능의 특징은 상수 + 컴파일 시간에 계산을 강제할 수 있는 최적화 용도의 키워드다. 컴파일 시간에 계산할 수 있으므로 최적화 용도로 사용된다.
상수 const 에서는 런타임 도중 값을 계산하고 일회성 대입이 가능하나, constexpr 컴파일에 미리 계산하고 값이 고정되어 런타임에서 변경할 수 없다.
코드 활용 예시
- 배열 크기
- 상수 테이블 작성
- 컴파일 시간에 결정이 필요한 수학 계산
- 템플릿 타입 결정
함수, 값에서의 사용
constexpr 은 상수에 값을 붙일 수 있을 뿐 아니라 함수에도 키워드를 붙일 수 있다.
함수에 붙인 경우와 값에 붙인 경우의 차이
- 값에 붙이면 컴파일 시간에 값이 결정됨
- 함수에 붙이면 컴파일 시간에 결과를 계산함 (타입 결정에 유용)
이러한 특징으로 코드의 안전성과 최적화에 도움이 된다.
신규로 추가되고 있는 확장기능
C++11 부터 지속적으로 constexpr 관련 기능들이 추가되고 있다.
기능 요약은 다음과 같다.
- const: 변경 불가한 변수, 런타임으로 상수 지정
- constexpr: 컴파일 타임에 상수 결정, 컴파일 + 런타임 대응
- consteval: 컴파일 타임에 상수 결정, 단 런타임에서는 지정 불가
- constinit: 초기화만 컴파일 타임에 상수로 동작, 런타임에서는 변수처럼 사용 가능