constexpr이 정적이어야하는 이유는 무엇입니까?
Nov 16 2020
이것 과 이것을 읽은 후에도 나는 이런 종류의 표현에 대해 여전히 혼란스러워합니다.
static constexpr int = 0;
AFAIK, C ++ :
static
전체 실행 및 동시 스레드로 안전한 초기화와 함께 수명 메모리 주소 보장constexpr
rvalue로 시간 컴파일 평가를 보장합니다. 이는 메모리 주소가 없음을 의미합니다.
그들은 나에게 모순적으로 보입니다. static
변수가 장기간 메모리 주소를 constexpr
갖도록하는 반면 반대 가정을 보장합니다. 놀랍게도 첫 번째 링크의 토론에서 다음과 같이 언급합니다.
constexpr int x = 3;
const int* p = &x;
x
rvalue 인 경우 메모리 주소를 어떻게 얻을 수 있습니까?
누구든지 설명 할 수 있습니까? 미리 감사드립니다
답변
1 MSalters Nov 16 2020 at 17:10
static
여러 가지 의미가 있습니다. 클래스에서 (귀하의 의견에 따라) 멤버가 해당 클래스의 특정 인스턴스 (객체)가 아니라 클래스와 연결되어 있음을 의미합니다.
의 경우 constexpr
그것은 많은 의미가 있습니다. 일반적으로 ctor 인수가 아닌 컴파일러에 알려진 값에 의해 초기화됩니다.