>백엔드 개발 >C++ >C에서 정적 constexpr 함수를 사용하여 정적 constexpr 멤버를 어떻게 초기화할 수 있습니까?

C에서 정적 constexpr 함수를 사용하여 정적 constexpr 멤버를 어떻게 초기화할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-30 07:02:17990검색

How Can I Initialize a Static constexpr Member Using a Static constexpr Function in C  ?

constexpr 정적 함수를 사용하여 정적 멤버 초기화

문제

목표는 constexpr에서 계산된 컴파일 타임 상수(constexpr 값)를 얻는 것입니다. 함수는 모두 동일한 클래스 네임스페이스 내에 있습니다.

첫 번째 시도

class C1 {
  constexpr static int foo(int x) { return x + 1; }
  constexpr static int bar = foo(sizeof(int));
};

그러나 초기화에서 상수가 아닌 표현식을 사용했기 때문에 g -4.5.3과 g -4.6.3 모두에서 실패했습니다.

두 번째 시도

class C2 {
  constexpr static int foo(int x) { return x + 1; }
  constexpr static int bar;
};
constexpr int C2::bar = C2::foo(sizeof(int));

이것은 g -4.5.3에서 컴파일되지만 g -4.6.3은 불일치 및 재선언 오류를 보여줍니다.

설명

C 표준(섹션 9.4.2)에 따르면 constexpr 정적 데이터 멤버는 중괄호 또는-로만 선언할 수 있습니다. 클래스 정의의 모든 초기화 절은 상수 표현식이어야 합니다.

In "두 번째 시도"에서는 선언에 필수 중괄호 또는 동등 초기화 프로그램이 부족합니다.

결론

초기 가정과 달리 두 시도 모두 실패했습니다. 표준은 클래스가 완료된 컨텍스트에서 정적 constexpr 데이터 멤버를 초기화하는 것을 금지합니다.

위 내용은 C에서 정적 constexpr 함수를 사용하여 정적 constexpr 멤버를 어떻게 초기화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.