[C++ 11] constexpr

const

상수 변수는 정의할 때 초기화(initialization)해야 하며, 할당(assignment)을 통해 값을 변경할 수 없다.

constexpr

C++에는 두 가지의 상수가 있다.

#include <iostream>

using namespace std;

int main()
{
    const int my_const(123); // 컴파일 타임 상수

    int number;
    cin >> number;

    const int special_number(number); // 런타임 상수

    return 0;
}

special_number는 사용자가 값을 입력해야 그떄서야 상수의 값이 초기화 된다.

my_const 처럼 컴파일 할 때 이미 값이 결정이 되는 것을 컴파일 타임 상수(compile-time constant)라 부르고, special_number 처럼 런타임에 결정이 결정 되는 것은 런타임 상수(runtime constant)라 부른다.

#include <iostream>

using namespace std;

int main()
{
    // 컴파일 타임 상수 명시화
    constexpr int my_const(123);

    int number;
    cin >> number;

    const int special_number(number);

    return 0;
}

이렇게 상수의 값이 컴파일 할 때 결정되는지 아니면 런타임 때 결정되는 지 헷갈리기 쉽다. 그래서 C++ 11에 constexpr 이라는 것이 생겼다.

constexpr을 붙이면 컴파일 할 때 값이 완전히 결정된다는 것을 뜻한다.

References

좋은 웹페이지 즐겨찾기