constexpr function란
함수명 앞에 constexpr 키워드를 사용할 수 있다.
이는 함수 인자값을 컴파일 시간에 결정할 수 있으면 컴파일 시간에 함수 실행!
결정할 수 없다면 (일반 함수처럼) 실행 시간에 함수 실행하게 된다.
[C++] constexpr 키워드
constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용 const 키워드 비
zoosso.tistory.com
[예제] constexpr function
#include <iostream>
constexpr int square(int x, int y)
{
return x * y;
}
int main()
{
printf("%d\n", square(3, 4)); // 12
int a = 1;
int b = 2;
printf("%d\n", square(a, b)); // 2
}
실행 결과만으로는 square(3, 4), square(a, b) 차이가
명확히 보이지 않지만
square(3, 4) → 컴파일 시간에 함수 실행
square(a, b) → 실행 시간에 함수 실행 (= 컴파일 시간에 인자 결정 x)
constexpr function 활용
template parameter 는 컴파일 시간에 결정되어야 한다.
#include <iostream>
template<typename T, int N>
struct Blog
{
T harbang[N];
};
int main()
{
Blog<int, 100> h1;
}
[C/C++] 함수 template
함수 template 필요성C++에서는 C와 달리 함수 오버로딩으로다른 인자를 가지는 동일한 함수명을 만들 수 있다.💻 함수 오버로딩(Overloading) 💻 함수 오버로딩(Overloading)함수 오버로딩 (overloading)
zoosso.tistory.com
Blog 구조체에서 harbang 배열을 100 크기로 만들어 주었다.
일반 함수는 컴파일 시간에 결정되지 못해 Build Error 발생하는 반면
템플릿 파라미터에 constexpr 함수는 전달할 수 있다.
#include <iostream>
template<typename T, int N>
struct Blog
{
T harbang[N];
};
constexpr int square(int x, int y)
{
return x * y;
}
int add(int x, int y)
{
return x + y;
}
int main()
{
// ok
Blog<int, square(3, 3)> h1;
// error
Blog<int, add(3, 4)> h2;
}
constexpr function 제약 사항
• 파일 오픈 X
• 동적 메모리 할당 X
• 가상함수 X
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] default member initializer (1) | 2025.02.02 |
---|---|
[C++] 클래스 파일 분할 (4) | 2025.01.30 |
[C++] member initializer list (1) | 2025.01.29 |
[C++] lower_bound, upper_bound 사용해보기 (1) | 2025.01.27 |
[C++] rvalue reference (4) | 2025.01.27 |
댓글