constexpr 함수는 컴파일 타임에 계산된다고 보장되지 않지만,
constexpr 변수는 보장된다
....라고 설명되는 경우가 많은데 일단 스펙상으로는 변수조차 그렇지 않다고 함
cppreference 설명 봐도 딱히 보장된다는 이야기는 없다
다만 시중에 나와있는 대부분의 컴파일러들은 constexpr 변수를 최적화 설정 관계 없이 컴파일 타임에 평가해주기는 한다
그렇지 않은 컴파일러가 뭐있는지는 모르겠음
constexpr 함수는 컴파일 타임에 계산된다고 보장되지 않지만,
constexpr 변수는 보장된다
....라고 설명되는 경우가 많은데 일단 스펙상으로는 변수조차 그렇지 않다고 함
cppreference 설명 봐도 딱히 보장된다는 이야기는 없다
다만 시중에 나와있는 대부분의 컴파일러들은 constexpr 변수를 최적화 설정 관계 없이 컴파일 타임에 평가해주기는 한다
그렇지 않은 컴파일러가 뭐있는지는 모르겠음
ㅋㅋㅋ
아 c++20에는 함수를 위해 consteval, 전역/정적 변수를 위해 constinit이 있다던데 안살펴봐서 자세히는 모르겠음
흠 누가 그런 통념을 갖고 있었던거죠
놀랍게도 스택오버플로나 레딧 등에 가보면 그렇게 답변 다는 애들이 많더라 여기 갤에서도 옛날에 비슷한 주제로 말 나왔을 때 그렇게 리플 다는 사람 봄
나도 여태 이리 알고있었는데 아니였네 ㅋㅋㅋ 근데 솔직히 이론따지기 좋아하는 사람들이나 신경쓸 문제 아니냐
구글링만 해도 대부분 constexpr자체를 컴파일타임에 연산이 보장되는 상수라 소개되어있길래 마냥 그런건줄 알았음. 그냥 정의되는 시점이 좀 이르고 까다로운 const 느낌이네
어쩐지 런타임에서 잘돌아가는 constexpr식이 static_assert랑 if constexpr에 안들어가긴 하더라
전에 여기 나왔을땐 "컴파일러가 보고 컴파일 타임에 처리가 가능할경우 그렇게 하고 아님 말고ㅋ" 아니였나 째뜬 그거때문에 코드를 보고 동작을 알수없다고 까이기도 했던 것 같은데 - dc App
아주 옛날에 constexpr int = some_constexpr_func();는 constexpr int 때문에 컴파일 타임에 계산되야한다고 주장하는 갤럼이 있었음 놀랍게도 논쟁하던 다른 갤럼이 설득당함
그래서 결론은 consteval 쓰면 된다는 거죠?
이글의 주제는 변수지만, 아무튼 함수에서는 consteval 쓰면 되는거 같은데 잘모름
아 consteval은 함수에만 되는거니깐 내가 딴소리했네
아닌가? 내가 tc++pl로 공부할 때는 constexpr value가 compile time initialization을 보장한다고 했던 것 같은데, 관련 레퍼런스가 더 있으면 추가 설명 부탁함. - dc App
오타 >> constexpr variable - dc App
제가 배우기로는 11에 그랬는데 14 때 확장했다고 들은 거 가타요
constexpr 함수가 컴파일타임에 안될 수도 있다는 건 알았는데 variable 까지 보장 안되는 건 처음 앎