constexpr Specifier in C++

smsh0722·6일 전

기타 정리

목록 보기
1/7

constexpr Specifier (컴파일 타임 지정자)

constexpr는 값이나 연산을 Compile Time (컴파일 타임)에 평가할 수 있도록 지정한다. C++11부터 지원한다.

constexpr Variable (상수 표현식 변수)

반드시 컴파일 타임에 값이 결정되어야 한다.

constexpr int x = 10 * 20;
  • 값 변경 불가
  • 배열 크기, 템플릿 인자 등 Constant Expression (상수 표현식)이 필요한 곳에 사용 가능

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 constexpr

  • const → 수정 불가만 보장. 값이 런타임에 결정될 수도 있음
  • constexpr → 컴파일 타임에 사용 가능한 값임을 보장
const int a = runtimeValue(); // 가능
constexpr int b = 10;         // 컴파일 타임 값

핵심은 const = 변경 금지, constexpr = 컴파일 타임 상수/연산이다.

0개의 댓글