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

[C++] constexpr function

by 까망 하르방 2025. 1. 29.
반응형

constexpr function란

함수명 앞에 constexpr 키워드를 사용할 수 있다.

이는 함수 인자값을 컴파일 시간에 결정할 수 있으면 컴파일 시간에 함수 실행!

결정할 수 없다면 (일반 함수처럼) 실행 시간에 함수 실행하게 된다.

 

 

📌 [C++] 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

 

[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

댓글