본문 바로가기

Language/C++ 그때그때 끄적끄적

[C++]Constexpr

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 함수는 위와 같은 경우 외에도 다양한 곳에 쓰이고 있습니다

참고자료

https://modoocode.com/293

 

씹어먹는 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