C++ constexpr

2022. 3. 2. 22:51C++

컴파일 시 값 평가를 강제하기 위하여 탬플릿 메타프로그래밍 남용

-> 보통 컴파일러가 자발적으로 평가해주지만 어떤 코드로 인하여 컴파일러가 해주지 않는 경우가 있다.

=> constexpr는 이를 해달라는 프로그래머의 의도를 보여주는 방식이다.(비슷한 예시로 inline이 있다)

컴파일 도중 "반드시" 값이 결정되게 하려면 constexpr변수를 쓸 것

 

문자열 해쉬를 도중에 만들 수 있다면?

-> 문자열 비교에 드는 런타임 비용은 언제나 O(1)이 된다.

-> constexpr을 써서 컴파일 타임에 문자열 해쉬를 만들 수 있게 됐다!

 

참고로 const와 constexpr은 다르다.

변수의 경우

const => 변경을 불허

constexpr => 컴파일 시 평가를 해달라

하지만 둘 다 const다

즉 constexpr도 변경을 불허한다.

함수의 경우

const => 멤버 함수에만 사용 가능, 멤버 변수 변경 불가

constexpr => 멤버, 비멤버 함수에 사용 가능, 멤버 변수를 변경 가능(C++ 14부터)

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

가변 인자 템플릿  (0) 2022.03.04
람다 식(Lambda Expression)  (0) 2022.03.03
이동 생성자 및 이동 대입 연산자  (0) 2022.02.19
C++ 스마트 포인터  (0) 2021.12.28
C++ STL  (0) 2021.12.27