1. Constexpr이란?
constexpr키워드는 함수나 객체 앞에 붙여 쓸 수 있는 키워드로
constexpr은 컴파일 타임에 객체의 값이나 해당 함수의 리턴값을 알 수 있습니다
컴파일 시간에 값을 계산하기 때문에 프로그램을 더 빠르게 실행하고 메모리를 적게 사용하는 데 도움이 됩니다.
2. 특징
constexpr은 상수식이라고 합니다 때문에
const와 매우 유사하지만 constexpr은 const + 컴파일 타임에 값을 안다 라는 부분 때문에 차이점이 존재합니다
예시로 num 값은 상수로 a로 지정해주면 상수의 역할을 수행하게 됩니다
int a = 1;
const int num = a;
하지만 constexpr은 이미 컴파일 시점에 a의 값을 모르기 때문에 오류가 발생하게 됩니다
int a = 1;
constexpr int num = a; //Error
컴파일 타임의 차이점 때문에
모든 constexpr = const 지만
모든 constexpr != const입니다
3. contexpr 함수
switch case 문에서 string 값을 사용하고 싶었습니다
하지만 swtch case문의 각 case에는 상수값이 필요했고 string이나 const를 사용할 수 없었기 때문에
constexpr 키워드를 추가한 Hash 함수를 통해 문자열을 정수로 바꿔주는
방법으로 해결할 수 있었습니다
#include<string>
#include<iostream>
using namespace std;
constexpr unsigned int Hash(const char* str) {
return str[0] ? static_cast<unsigned int>(str[0]) + 0xEDB8832Full * Hash(str + 1) : 8603;
}
int main()
{
switch (Hash("AB"))
{
case Hash("AB"):
{
cout << "AB" << '\n';
break;
}
case Hash("CD"):
{
cout << "CD" << '\n';
break;
}
}
}
constexpr 함수는 위와 같은 경우 외에도 다양한 곳에 쓰이고 있습니다
참고자료
씹어먹는 C++ - <16 - 2. constexpr 와 함께라면 컴파일 타임 상수는 문제없어>
constexpr 을 통해 컴파일 타임 상수인 객체를 선언할 수 있다. const 와 constexpr 은 다르다. const 는 컴파일 타임에 상수일 필요가 없다! (const 인 애들 중에서 constexpr 이 있다고 생각하면 된다) constexpr
modoocode.com
'Language > C++ 그때그때 끄적끄적' 카테고리의 다른 글
[C++]map 사용법 (0) | 2024.11.10 |
---|---|
[C++] range based for(범위 기반 for문) (0) | 2023.05.16 |
[C++] 문자열 나누기 spring split (0) | 2023.05.15 |
[C++] Iterator 반복자 (0) | 2023.05.10 |
[C++]람다식이란 (0) | 2022.05.11 |