Programing/C++

[C++ 프로그래밍] 상수 표현식 (Constant Expressions)

유니얼 2024. 7. 10. 02:42
728x90

C++ 기초 프로그래밍: 상수 표현식 (Constant Expressions)

C++에서 상수 표현식(constant expressions)은 컴파일 타임에 계산되는 상수 값을 의미합니다. 이러한 상수 표현식은 프로그램의 성능을 최적화하고 코드의 안전성을 높이는 데 중요한 역할을 합니다. 이번 블로그 글에서는 C++에서 상수 표현식을 선언하고 사용하는 방법에 대해 알아보겠습니다.

constexpr 키워드

C++11부터 도입된 constexpr 키워드는 상수 표현식을 정의하는 데 사용됩니다. constexpr로 선언된 변수는 컴파일 타임에 값을 계산하며, 이를 통해 컴파일 타임 상수를 사용할 수 있습니다. 이러한 상수는 프로그램의 성능을 최적화하는 데 도움을 줍니다.

예제 코드

다음 예제 코드는 constexpr 키워드를 사용하여 상수 표현식을 정의하고 사용하는 방법을 보여줍니다:

#include <iostream>

int main(){

    constexpr int SOME_LIB_MAJOR_VERSION {1237};
    constexpr int eye_count {2};
    constexpr double PI {3.14};

    // eye_count = 4; // 컴파일 오류: constexpr 변수는 변경할 수 없음

    std::cout << "eye count : " << eye_count << std::endl;
    std::cout << "PI : " << PI << std::endl;

    // int leg_count {2}; // constexpr 변수는 런타임에 결정되는 값을 가질 수 없음
    // constexpr int arm_count{leg_count}; // 컴파일 오류

    constexpr int room_count {10};
    constexpr int door_count {room_count}; // OK: room_count는 컴파일 타임 상수

    const int table_count {5};
    constexpr int chair_count { table_count * 5 }; // OK: table_count는 const 변수

    // static_assert( SOME_LIB_MAJOR_VERSION == 123); // 컴파일 오류: 조건이 거짓

    // int age = 5;
    // static_assert( age == 5); // 컴파일 오류: age는 런타임 변수

    std::cout << "App doing its thing..." << std::endl;

    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다:

eye count : 2
PI : 3.14
App doing its thing...

예제 분석

constexpr 변수 선언:

  • constexpr int SOME_LIB_MAJOR_VERSION {1237};는 라이브러리의 주요 버전을 나타내는 상수 표현식입니다.
  • constexpr int eye_count {2};와 constexpr double PI {3.14};는 각각 눈의 개수와 원주율을 나타내는 상수 표현식입니다.

컴파일 타임 상수 사용:

  • constexpr로 선언된 변수는 컴파일 타임에 값을 계산하며, 이를 사용하여 다른 constexpr 변수를 초기화할 수 있습니다.
  • 예를 들어, constexpr int room_count {10};와 constexpr int door_count {room_count};는 모두 컴파일 타임 상수입니다.

상수와 constexpr 변수의 차이:

  • const int table_count {5};는 상수 변수로, 런타임에 값이 결정될 수 있습니다.
  • constexpr int chair_count { table_count * 5 };는 컴파일 타임 상수로, table_count의 값을 사용하여 계산됩니다.

static_assert:

  • static_assert는 컴파일 타임에 조건을 검사하는 데 사용됩니다. 조건이 거짓이면 컴파일 오류를 발생시킵니다.
  • 주석 처리된 static_assert( SOME_LIB_MAJOR_VERSION == 123);는 조건이 거짓이므로 컴파일 오류를 발생시킵니다.

결론

C++에서 상수 표현식은 컴파일 타임에 값을 계산하여 프로그램의 성능을 최적화하고 코드의 안전성을 높이는 데 중요한 역할을 합니다. constexpr 키워드를 사용하여 상수 표현식을 정의할 수 있으며, 이를 통해 컴파일 타임 상수를 사용할 수 있습니다.

반응형