728x90
consteval은 Compile Time은 오래 걸리더라도 미리 계산을 다 해놓겠다고 지정하는 것이라고 생각 하면된다.
우리 모두가 알고 있듯이 아래 함수는 RunTime에 계산이 된다
int Square(int n)
{
return n * n;
}
하지만 다음과 같이 consteval 키워드를 붙여주면 컴파일 타임에 계산이되어서 상수로 들어가게된다.
consteval int SquareConstEval(int n)
{
return n * n;
}
무슨 말인가하면 프로그램을 디스어셈블리로 확인해보면 좀 더 쉽게 확인할 수 있다.
위에 사진을 보면 Square(10)의 경우 어셈블리로 move, call, move가 RunTime에 직접 계산이 된 것을 확인 할 수 있지만, 아래 SquareConstEval(10)의 경우에는 mov 어셈블리 밖에 없다 왜냐하면 CompileTime에 이미 계산이 된 채로
"int b = 100;" 으로 변경이 된 상태이기 때문이다.
728x90
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - Conditionally Explicit Constructor (조건부 Explicit 생성자) (1) | 2023.12.27 |
---|---|
C++20 - constinit (2) | 2023.12.27 |
C++20 - 지정된 초기화 (Designated Initialization) (1) | 2023.12.17 |
C++20 - 삼항 비교 연산자(Three-Way Comparison) (0) | 2023.12.17 |
C++20 - Coroutine (1) | 2023.12.17 |