constexpr이 정적이어야하는 이유는 무엇입니까?

Nov 16 2020

이것 과 이것을 읽은 후에도 나는 이런 종류의 표현에 대해 여전히 혼란스러워합니다.

static constexpr int = 0;

AFAIK, C ++ :

  • static 전체 실행 및 동시 스레드로 안전한 초기화와 함께 수명 메모리 주소 보장
  • constexpr rvalue로 시간 컴파일 평가를 보장합니다. 이는 메모리 주소가 없음을 의미합니다.

그들은 나에게 모순적으로 보입니다. static변수가 장기간 메모리 주소를 constexpr갖도록하는 반면 반대 가정을 보장합니다. 놀랍게도 첫 번째 링크의 토론에서 다음과 같이 언급합니다.

constexpr int x = 3;
const int* p = &x;

xrvalue 인 경우 메모리 주소를 어떻게 얻을 수 있습니까?

누구든지 설명 할 수 있습니까? 미리 감사드립니다

답변

1 MSalters Nov 16 2020 at 17:10

static여러 가지 의미가 있습니다. 클래스에서 (귀하의 의견에 따라) 멤버가 해당 클래스의 특정 인스턴스 (객체)가 아니라 클래스와 연결되어 있음을 의미합니다.

의 경우 constexpr그것은 많은 의미가 있습니다. 일반적으로 ctor 인수가 아닌 컴파일러에 알려진 값에 의해 초기화됩니다.