나는 constexpr이면 일단 어딘가에 그 값이 하드코딩 되어 있을테니 당연히 프로그램이 끝날 때 까지 값이 살아있겠지? 라고 생각하고 실험을 해봤음

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <array>
 
int main(void)
{
    auto x = []() {
        constexpr auto list = std::array<int, 10>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        return list.begin();
    }();
    std::cout << *(x+5);
    return 0;
}
cs

그런데 결과가 매번 달라지더라고.. 딱히 그렇진 않았던거임


1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <array>
 
int main(void)
{
    auto x = []() {
        static constexpr auto list = std::array<int, 10>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        return list.begin();
    }();
    std::cout << *(x+5);
    return 0;
}
cs

결론적으로 이게 제대로 돌아가는 코드였음