반응형
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 |
댓글