본문 바로가기
개발/C++ (98,03,11,14,17,20,23)

Modern C++ : const vs constexpr (98, 11, 14, 17, 20)

by snowoods 2025. 8. 6.

Modern C++

 

const vs constexpr

 

개요

이 문서에서는 C++의 constconstexpr 키워드를 비교하고, 각각의 특징과 사용 사례를 정리합니다.

 

C++ 버전별 도입 시기

  • C++98: const
  • C++11:  constexpr 도입
  • C++14, 17, 20: constexpr 기능 확장

 

const vs constexpr

구분 const constexpr
의미 읽기 전용 상수 컴파일 타임 상수
연산 시기 런타임 또는 컴파일 타임 (환경에 따라 다름) 컴파일 타임에 반드시 계산
사용 제한 모든 변수에 적용 가능 함수, 변수, 객체 생성자 등 다양한 곳에 적용 가능
최적화 힌트 컴파일러가 최적화에 활용하지만 보장되지 않음 컴파일러가 반드시 상수 표현식으로 취급하여 최적화

 

예제 코드

#include <iostream>

// const: 런타임에 읽기 전용 변수
// constexpr: 컴파일 타임에 계산되는 상수 표현식
constexpr std::uint64_t faculty(const std::uint8_t n)
{
    auto result = std::uint64_t{1};

    for (std::uint8_t i = 1; i <= n; i++)
    {
        result *= i;
    }

    return result;
}

int main()
{
    const auto value1 = faculty(5);   // 런타임에 계산
    constexpr auto value2 = faculty(5);   // 컴파일 타임에 계산

    std::cout << "value1 = " << value1 << "\n";
    std::cout << "value2 = " << value2  << "\n";

    return 0;
}

 

활용 팁

컴파일 타임 상수가 필요한 경우 (배열 크기, 템플릿 인자, static_assert 등) 반드시 constexpr 사용
단순한 읽기 전용 변수는 const로 충분
복잡한 상수 표현식을 작성할 때는 constexpr 함수로 추상화