약간 설명이 애매하심. 일단 전제는 constexpr은 컴파일타임에 값을 결정할 수 있어야함.
1. i는 컴파일타임에 42인지 결정됨. 문제없음
2. i의 주소는 실행되어야만 결정가능함(실행해야 함수의 스택프레임이 어딘지 결정됨)
그래서 i의 주소를 컴파일타임에 알 수 없어서 오류가 납니다.
해결방법은 p에 constexpr 떼야합니다. - dc App
익명(examine2859)2025-09-20 18:13
답글
@ㅇㅇ
cpp는 구현체마다 신기한 규칙들이 조금씩 있을수있어서 제가 100퍼 맞은건 아닐수도 있음. 가능하다면 책에 뭐라쓰여있는지도 올려주실수 있나요? - dc App
익명(examine2859)2025-09-20 18:22
답글
미안.. 내가 책을 제대로 읽지 않았어. 책 내용은 이렇게 되어있음
i를 함수 밖에 넣어야 한다네
constexpr int i = 42; // type of i is const int
// i and j must be defined outside any function
constexpr const int *p = &i; // p is a constant pointer to the const int i
익명(39.121)2025-09-20 18:27
답글
@ㅇㅇ(39.121)
근데 정적 constexpr의 주소면 constexpr로 가능하다는건 몰랐네요. 저도 하나 배워갑니다. 만약 함수 내부더라도 static constexpr int i였으면 가능할수도 있겠네요. - dc App
익명(examine2859)2025-09-20 18:38
답글
constexpr 변수의 주소이냐와는 상관 없음 상수일 필요도 없음 그저 전역변수이거나 정적지역변수면 다 됨
멍멍(sentence8449)2025-09-20 18:53
답글
@멍멍
아 그렇겠네요. 값은 몰라도 주소만 평가 가능하면 되니까요. - dc App
익명(examine2859)2025-09-20 18:56
i가 전역변수면 그 주소를 컴파일 타임에 정할수 있음 - dc App
꾹꾹(cook3631)2025-09-20 18:31
윗댓들 말이 맞고, 결론부터 말하면
i를 main 함수 바깥에 global scope로 정의하거나,
또는 main 함수 내에서 정의하더라도 static 키워드를 붙여서 정의하면 됨
MSVC 문제일 수 있음
I가 컴파일 타임에 결정되어야 하는거 아님? 주소면 런타임에 결정되잖아
약간 설명이 애매하심. 일단 전제는 constexpr은 컴파일타임에 값을 결정할 수 있어야함. 1. i는 컴파일타임에 42인지 결정됨. 문제없음 2. i의 주소는 실행되어야만 결정가능함(실행해야 함수의 스택프레임이 어딘지 결정됨) 그래서 i의 주소를 컴파일타임에 알 수 없어서 오류가 납니다. 해결방법은 p에 constexpr 떼야합니다. - dc App
@ㅇㅇ cpp는 구현체마다 신기한 규칙들이 조금씩 있을수있어서 제가 100퍼 맞은건 아닐수도 있음. 가능하다면 책에 뭐라쓰여있는지도 올려주실수 있나요? - dc App
미안.. 내가 책을 제대로 읽지 않았어. 책 내용은 이렇게 되어있음 i를 함수 밖에 넣어야 한다네 constexpr int i = 42; // type of i is const int // i and j must be defined outside any function constexpr const int *p = &i; // p is a constant pointer to the const int i
@ㅇㅇ(39.121) 근데 정적 constexpr의 주소면 constexpr로 가능하다는건 몰랐네요. 저도 하나 배워갑니다. 만약 함수 내부더라도 static constexpr int i였으면 가능할수도 있겠네요. - dc App
constexpr 변수의 주소이냐와는 상관 없음 상수일 필요도 없음 그저 전역변수이거나 정적지역변수면 다 됨
@멍멍 아 그렇겠네요. 값은 몰라도 주소만 평가 가능하면 되니까요. - dc App
i가 전역변수면 그 주소를 컴파일 타임에 정할수 있음 - dc App
윗댓들 말이 맞고, 결론부터 말하면 i를 main 함수 바깥에 global scope로 정의하거나, 또는 main 함수 내에서 정의하더라도 static 키워드를 붙여서 정의하면 됨