본문 바로가기
프로그래밍 언어/C++

[C++] constexpr 키워드

by 까망 하르방 2024. 4. 1.
반응형

constexpr

컴파일 시간에 결정되는 상수 값

C++11 에서 도입된 문법

템플릿 인자로 사용 가능

상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용

 

 

const 키워드 비교

값 초기화 이후 변경할 수 없다는 것에서는 동일하다.

#include <iostream>

void main()
{
    const int x = 5;
    x = 3; // error

    constexpr int y = 6;
    y = 2; // error
}

 

 

Q) 그렇다면 어떤 차이가 있을까?

상수값은 컴파일, 실행 시점 등 정해지는 시기가 다를 수 있다.

#include <iostream> 

void main()
{
    const int x = 5;
    int arr1[x]; // ok

    int temp = 3;
    const int y = temp; // ok
    int arr2[y]; // error
}

 

 

y는 const 값이므로 temp 값을 받은 이후 변경이 불가능하다.

temp는 실행 중에 변할 수 있기에 컴파일 시점에는 값을 정할 수 없다.

배열의 크기는 컴파일 시간에 알 수 있어야 하기에

const 키워드로 배열 선언을 못할 수도 있다. → 사용자가 혼란스러울 수 있는 부분

 

 

즉,

x = 컴파일 시간 상수 → 배열 크기로 가능

y = 실행 시간 상수 → 배열 크기가 될 수 없음

 

 

이런 부분을 명확하게 하고자 컴파일 시간 상수로만 가능한 것이

constepxr 키워드이다.

이러한 키워드는 최적화에도 더 좋기도 하다.

#include <iostream>

void main()
{
    constexpr int x = 5; // ok

    int temp = 3;
    constexpr int y = temp; // error   
}

 

 

constexpr 활용

값을 바꿀 수 있는 변수값으로 초기화 하려는 것이 아니라면

const 보다는 constexpr을 활용해보면 좋을 것 같다.

constepxr 초기화식은 컴파일 시간에 계산되어야 한다.

const double pi = 3.14; // 보다
constexpr double pi = 3.14; // 가 적합
 

 

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C/C++] Header Guard 활용  (2) 2024.07.24
[C++] 생성자 함수  (2) 2024.06.03
[C++] explicit 키워드  (0) 2023.01.20
[C++] 네임스페이스(namespace) 활용  (0) 2022.08.09
[C++] 인라인(inline) 함수  (0) 2022.08.06

댓글