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 |