Namespaces
Variants

constexpr specifier (since C23)

From cppreference.net

constexpr 저장 클래스 지정자로 선언된 스칼라 객체는 상수 입니다. 정적 초기화 규칙에 따라 완전하고 명시적으로 초기화되어야 합니다. 여전히 선언에 적합한 링크를 가지며 주소를 취할 수 있도록 런타임에 존재합니다; 단순히 런타임에 어떤 방식으로도 수정될 수 없으며, 즉 컴파일러는 객체의 고정된 값을 다른 어떤 상수 표현식 에서도 사용할 수 있습니다.

또한, 이러한 상수의 초기화에 사용되는 상수 표현식은 컴파일 타임에 검사됩니다.

부동 소수점 타입의 초기화자는 번역 시점 부동 소수점 환경으로 평가되어야 합니다.

constexpr 로 선언될 수 있는 객체의 타입에는 몇 가지 제한 사항이 있습니다. 즉, 다음 구성 요소들은 constexpr 로 지정될 수 없습니다:

목차

키워드

constexpr

예제

#include <fenv.h>
#include <stdio.h>
int main(void)
{
    constexpr float f = 23.0f;
    constexpr float g = 33.0f;
    fesetround(FE_TOWARDZERO);
    constexpr float h = f / g; // 위의 fesetround() 영향을 받지 않음
    printf("%f\n", h);
}

출력:

0.696969

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.7.2 Storage-class specifiers (p: 98-103)

참고 항목

C++ 문서 참조: constexpr 타입 지정자