constexpr 이란?
1. 컴파일 시간 상수를 만드는 키워드
2. 컴파일 시간에 결정되는 상수 값으로만 초기화 할 수 있다.
3. constexpr 은 C++11에 처음 나왔으며 C++14 에서 개선된 기록이 있다.
C++에서 const와 constexpr의 차이 ( const vs constexpr )
상수에는 아래 2가지가 존재한다.
1. 컴파일 시간에 알 수 있는 상수
2. 컴파일 시간에 알 수 없는 상수(런타임에 알 수 있는 상수)
컴파일 시간에 알 수 있는 상수를 컴파일 시간 상수 (compile-time constant)라고 하고, 컴파일 시간에 알 수 없는 상수 즉 실행시간에 알 수 있는 상수를 런타임 상수(runtime constant)라고 한다.
const는 컴파일 시간에 알 수 있는 상수와 컴파일 시간에 알 수 없는 상수 둘다 사용할 수 있다.
반면 constexpr은 컴파일 시간에 알수 있는 컴파일 상수에서만 사용할 수 있다.
const가 constexpr를 포함한다고 생각하고 컴파일 상수에는 constexpr을 사용하고 그 외의 상수에는 const를 사용하자.
컴파일 시간 상수와 런타임 상수 예시
#include<iostream>
using namespace std;
int main(void) {
int a = 1;
const int example1 = 2; //컴파일 시간 상수 (정상동작)
const int example2 = a; //런타임 상수 (정상동작)
constexpr int example3 = 20; //컴파일 시간 상수 (정상동작)
constexpr int example4 = a; // 런타임 상수 (ERROR)
return 0;
}
예시에서 보면 example1, example3은 컴파일 시간 상수이고, 변수에 변수값을 대입하여 상수로 만드려는 example2, example4는 런타임 상수 이다.
constexpr은 컴파일 타임 상수에만 사용할 수 있으므로 example4에서 error가 발생한다. (컴파일 시점에 example4의 값을 알 수 없음)
정리
1. constexpr, const는 둘 다 상수를 의미한다.
2. const는 컴파일 시간, 실행시간 상수 모두 만들수 있고, constexpr은 컴파일 시간 상수만 만들 수 있다.
3. const만 사용하더라도 기능적으로 문제는 없지만 컴파일 상수에는 더 명확한 constexpr을 사용하는것을 추천한다.
'언어 > C, C++' 카테고리의 다른 글
[C++] #define, constexpr, PROGEM 비교 (0) | 2024.10.27 |
---|---|
[C++] PROGEM (0) | 2024.10.26 |
[C++] constexpr (0) | 2024.10.25 |
[C++] #define (0) | 2024.10.24 |
[C, C++] 모든 타입 정리 (0) | 2024.04.24 |
댓글