consteval

Yongs12 ㅣ 2025. 4. 10. 04:51

C++20부터 도입되었으며 함수를 오직 컴파일 타임에만 실행하도록 강제할 수 있다.

런타임 호출을 시도하면 컴파일 오류가 발생한다.

 

 

예시

#include <iostream>

// 반드시 컴파일 타임에만 평가되는 함수
consteval int Factorial(const int n) 
{
    return n <= 1 ? 1 : n * Factorial(n - 1);
}

int main() 
{
      int value1{ 5 };                // 런타임 변수
      const int value2{ 5 };        // 상황에 따라 컴파일 타임에 평가될 수 있는 변수
      constexpr int value3{ 5 };   // 컴파일 타임에 평가되는 변수

      int a{ Factorial(value1) };  // 컴파일 에러
      int b{ Factorial(value2) };  // 상황에 따라 컴파일 에러
      int c{ Factorial(value3) };  // 컴파일 성공
}

 

 

constexpr, const eval 차이

구분 constexpr 함수 consteval 함수
버전 C++11 C++20
평가 시점 호출시점에 따라 컴파일 또는 런타임 컴파일 타임
예외 처리 C++14부터 throw 가능  throw 불가

 

'C, C++' 카테고리의 다른 글

[[likely]] / [[unlikely]]  (0) 2025.04.17
[[nodiscard]]  (0) 2025.02.12
[[maybe_unused]]  (0) 2025.01.31
[[noreturn]]  (0) 2025.01.27
[[deprecated]]  (0) 2025.01.26