constexpr Specifier (컴파일 타임 지정자)constexpr는 값이나 연산을 Compile Time (컴파일 타임)에 평가할 수 있도록 지정한다. C++11부터 지원한다.
constexpr Variable (상수 표현식 변수)반드시 컴파일 타임에 값이 결정되어야 한다.
constexpr int x = 10 * 20;
constexpr Function (상수 표현식 함수)컴파일 타임에 실행 가능한 함수다.
constexpr int product(int a, int b) {
return a * b;
}
constexpr int x = product(10, 20); // 컴파일 타임
단, constexpr 함수라고 항상 컴파일 타임에 실행되는 것은 아니다. 인자가 런타임 값이면 일반 함수처럼 런타임에 실행될 수도 있다.
C++11에서는 함수 내용에 제약이 많았지만, C++14부터 반복문·지역 변수 등을 사용할 수 있도록 크게 완화되었다.
constexpr Constructor (상수 표현식 생성자)객체 자체를 컴파일 타임에 생성할 수 있게 한다.
struct Point {
int x;
constexpr Point(int x) : x(x) {}
};
constexpr Point p(10);
constexpr 함수와 생성자는 Implicitly Inline (암시적으로 inline)이다.
const vs constexprconst → 수정 불가만 보장. 값이 런타임에 결정될 수도 있음constexpr → 컴파일 타임에 사용 가능한 값임을 보장const int a = runtimeValue(); // 가능
constexpr int b = 10; // 컴파일 타임 값
핵심은 const = 변경 금지, constexpr = 컴파일 타임 상수/연산이다.