ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] const와 constexpr 차이
    프로그래밍/C & C++ 2024. 7. 23. 06:05
    728x90
    반응형

    constconstexpr는 둘 다 상수를 정의하는 데 사용되지만, 서로 다른 방식으로 작동하고, 다양한 용도로 사용됩니다. 다음은 constconstexpr의 차이점에 대한 설명입니다.

    const (Constant)

    • const 키워드는 변수의 값을 변경할 수 없음을 나타냅니다.
    • 컴파일 타임 또는 런타임에 초기화될 수 있습니다.
    • 초기화된 후 값을 변경할 수 없습니다.
    • 일반적으로 런타임 상수를 나타낼 때 사용됩니다.

    예시:

    const int x = 10; // x는 변경할 수 없는 상수
    int y = 20;
    const int* ptr = &y; // ptr은 y를 가리키는 상수 포인터, 하지만 y의 값은 변경 가능
    
    // Error: x is const
    // x = 20;

    constexpr (Constant Expression)

    • constexpr 키워드는 변수, 함수, 또는 객체가 컴파일 타임에 상수 표현식인지 나타냅니다.
    • 컴파일 타임에 평가될 수 있어야 합니다.
    • 주로 컴파일 타임 상수를 나타내는 데 사용됩니다.
    • 함수와 함께 사용하면, 함수가 컴파일 타임에 평가될 수 있음을 나타냅니다.

    예시:

    constexpr int x = 10; // x는 컴파일 타임 상수
    constexpr int square(int n) { return n * n; }
    constexpr int y = square(5); // y는 컴파일 타임에 계산된 상수
    
    // Error: y is constexpr
    // y = 30;

    차이점 요약

    1. 컴파일 타임 평가:
      • const: 런타임 상수일 수 있으며, 반드시 컴파일 타임에 평가될 필요는 없습니다.
      • constexpr: 컴파일 타임 상수여야 하며, 컴파일 타임에 평가될 수 있어야 합니다.
    2. 사용 용도:
      • const: 변수의 값을 변경할 수 없음을 나타냅니다. 일반적으로 런타임 상수를 나타냅니다.
      • constexpr: 컴파일 타임 상수를 나타내며, 컴파일 타임에 평가될 수 있는 상수 표현식을 정의합니다.
    3. 함수 사용:
      • const: 함수와 함께 사용하지 않습니다.
      • constexpr: 함수와 함께 사용하여, 해당 함수가 컴파일 타임에 평가될 수 있음을 나타냅니다.

    예시 코드 비교

    #include <iostream>
    
    // const 사용 예시
    void constExample() {
        const int a = 10; // 컴파일 타임 상수
        int b = 20;
        const int* ptr = &b; // 상수 포인터
    
        // ptr이 가리키는 값은 변경 가능
        b = 30;
    
        std::cout << "const a: " << a << std::endl;
        std::cout << "const ptr: " << *ptr << std::endl;
    }
    
    // constexpr 사용 예시
    constexpr int factorial(int n) {
        return (n <= 1) ? 1 : (n * factorial(n - 1));
    }
    
    void constexprExample() {
        constexpr int num = 5;
        constexpr int result = factorial(num); // 컴파일 타임 평가
    
        std::cout << "constexpr result: " << result << std::endl;
    }
    
    int main() {
        constExample();
        constexprExample();
    
        return 0;
    }
    • constExample 함수에서는 const 키워드를 사용하여 상수를 정의하고, 상수 포인터를 사용합니다.
    • constexprExample 함수에서는 constexpr 키워드를 사용하여 컴파일 타임 상수와 컴파일 타임 평가 함수인 factorial을 사용합니다.

    이 예시를 통해 constconstexpr의 사용 목적과 차이를 명확히 이해할 수 있습니다.

    728x90
    반응형
Designed by Tistory.