0Pricing
C++ Academy · 강의

constexpr와 컴파일 시간

컴파일 시간에 값 계산하기

constexpr와 컴파일 시간은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

constexpr의 의미

constexpr는 값이나 함수를 컴파일 시점에 평가할 수도 있음을 컴파일러에 알리며, 이를 통해 진정한 컴파일 시점 상수를 만들 수 있습니다.

#include <iostream>

int main() {
    constexpr int size = 4 * 4;   // computed at compile time
    int arr[size];
    std::cout << sizeof(arr) / sizeof(int) << "\n";
}

constexpr 함수

constexpr 함수는 상수 인수를 받으면 컴파일 시점에 실행할 수 있고, 그렇지 않으면 실행 시점에 실행됩니다.

#include <iostream>

constexpr int square(int x) { return x * x; }

int main() {
    constexpr int s = square(5);   // compile time
    int n = 6;
    std::cout << s << " " << square(n) << "\n";  // second at runtime
}

배열의 컴파일 시점 상수

constexpr 값은 컴파일 시점에 알려져 있으므로 배열의 크기로 사용하거나 템플릿 인수로 사용할 수 있습니다.

constexpr와 const 비교

const는 "변경할 수 없음"을 뜻하고, constexpr는 "컴파일 시점에 알려짐"을 뜻합니다. 모든 constexpr는 암시적으로 const이지만, 모든 const가 constexpr인 것은 아닙니다.

#include <iostream>

int main() {
    int x;
    std::cin >> x;
    const int a = x;        // const but runtime value
    constexpr int b = 10;   // compile-time constant
    std::cout << b << "\n";
}

재귀 constexpr

constexpr 함수는 재귀적으로 호출할 수 있으므로 프로그램이 실행되기 전에 컴파일러가 팩토리얼 같은 값을 계산할 수 있습니다.

#include <iostream>

constexpr long factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
    constexpr long f = factorial(5);  // 120 at compile time
    std::cout << f << "\n";
}

현대 C++의 더 강력한 constexpr

C++14부터 constexpr 함수에는 반복문, 지역 변수, 분기문을 사용할 수 있으므로 복잡한 상수를 컴파일 시점에 계산할 수 있습니다.

#include <iostream>

constexpr int sumTo(int n) {
    int total = 0;
    for (int i = 1; i <= n; ++i) total += i;
    return total;
}

int main() {
    constexpr int s = sumTo(100);
    std::cout << s << "\n";
}

constexpr 변수는 컴파일 시점에 초기화해야 합니다

constexpr로 선언한 변수는 컴파일 시점에 평가할 수 있는 초기화 식을 가져야 합니다. 그렇지 않으면 프로그램이 컴파일되지 않습니다.

컴파일 시점 계산의 장점

컴파일 시점에 계산하면 실행 시점 비용이 들지 않고, 상수 컨텍스트에서 값을 사용할 수 있으며, 오류를 더 일찍 발견할 수 있습니다.

constexpr와 템플릿

constexpr 값은 템플릿 및 std::array와 자연스럽게 함께 사용할 수 있습니다. 이때 크기와 매개변수는 컴파일 시점 상수여야 합니다.

실행 시점 동작으로 전환되는 경우

constexpr 함수가 상수가 아닌 인수를 받으면 오류 없이 일반 함수처럼 실행 시점에 실행됩니다.

상수에는 constexpr 우선 사용하기

진정한 상수(크기, 수학 계산, 조회 표)에는 constexpr를 사용하십시오. const보다 표현력이 뛰어나며 컴파일 시점 보장을 가능하게 합니다.

빠른 확인

constexpr에 대한 이해도를 확인해 보십시오.

복습

constexpr를 사용하면 변수와 함수를 컴파일 시점에 평가할 수 있고, 변경만 금지하는 const와는 다르며, 현대 C++에서 반복문과 재귀를 지원하고, 상수가 아닌 입력을 받으면 실행 시점 동작으로 전환된다는 점을 배웠습니다.

자주 묻는 질문

“constexpr와 컴파일 시간” 강의는 무료인가요?

네 — “constexpr와 컴파일 시간” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“constexpr와 컴파일 시간”에서 뭘 배우나요?

컴파일 시간에 값 계산하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“constexpr와 컴파일 시간” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. const 변수와 매개변수
  2. const 멤버 함수
  3. constexpr와 컴파일 시간
  4. consteval과 constinit
← C++ Academy(으)로 돌아가기