반응형
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++] lower_bound, upper_bound 사용해보기 (1) | 2025.01.27 |
---|---|
[C++] rvalue reference (4) | 2025.01.27 |
[C++] static_cast 사용 방법 및 필요성 (2) | 2025.01.26 |
[C++] 람다 표현식 lambda expression (2) | 2025.01.25 |
[C++] const_cast 필요성 및 활용 (4) | 2025.01.22 |
댓글