목표는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!