constexpr, constinit, consteval 사용 (Use of constexpr, constinit, and consteval)¶
실제 상수를 정의하거나 상수 초기화를 보장하려면 constexpr을 사용하세요. 상수가 아닌 변수에 대한 상수 초기화를 보장하려면 constinit를 사용하십시오.
일부 변수는 constexpr로 선언되어 변수가 실제 상수, 즉 컴파일/링크 시 고정됨을 나타낼 수 있습니다. 일부 함수와 생성자는 constexpr 변수를 정의하는 데 사용할 수 있도록 constexpr로 선언할 수 있습니다. 함수를 consteval로 선언하여 컴파일 시간으로 사용을 제한할 수 있습니다.
constexpr을 사용하면 리터럴이 아닌 부동 소수점 표현으로 상수를 정의할 수 있습니다. 사용자 정의 유형의 상수 정의; 함수 호출을 통한 상수 정의.
무언가를 constexpr로 성급하게 표시하면 나중에 다운그레이드해야 할 경우 마이그레이션 문제가 발생할 수 있습니다. constexpr 함수 및 생성자에 허용되는 사항에 대한 현재 제한 사항으로 인해 이러한 정의에서 모호한 해결 방법이 필요할 수 있습니다.
constexpr 정의를 사용하면 인터페이스의 상수 부분에 대한 보다 강력한 사양이 가능해집니다. 실제 상수와 해당 정의를 지원하는 함수를 지정하려면 constexpr을 사용하세요. consteval은 런타임에 호출하면 안 되는 코드에 사용될 수 있습니다. constexpr 과 함께 사용할 수 있도록 함수 정의를 복잡하게 만드는 것을 피하세요. 인라인을 강제하기 위해 constexpr 또는 consteval을 사용하지 마세요.
이해하기 쉽게 설명하기¶
세 키워드의 역할¶
constexpr: 진짜 상수(컴파일/링크 시 고정)를 정의하거나 상수 초기화를 보장. 함수·생성자에 붙이면 그 결과를constexpr변수 정의에 쓸 수 있습니다.constinit: 변수 자체는 상수가 아니지만 초기화만은 컴파일 타임 상수 초기화임을 보장(정적 변수의 초기화 순서 문제 회피).consteval: 함수를 컴파일 타임 전용으로 제한(런타임 호출 금지).
사용 지침¶
- 진짜 상수와 그것을 지원하는 함수에는
constexpr을 쓰세요. - 런타임에 호출되면 안 되는 코드에는
consteval. - 단,
constexpr로 성급하게 표시하지 마세요 — 나중에 되돌려야 하면 마이그레이션이 어렵습니다. constexpr에 맞추려고 함수 정의를 복잡하게 비틀지 마세요.- 인라인을 강제하려는 목적으로
constexpr/consteval을 쓰지 마세요.