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

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

Linda Hamilton
Linda Hamilton원래의
2024-12-07 21:42:14307검색

How Can I Initialize a Static Constexpr Member with a Static Function in C  ?

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

문제:

정적 함수가 있는 constexpr 멤버, 컴파일 시 계산된 값으로 초기화 시간. 그러나 GCC에서 그렇게 하려고 하면 컴파일 오류가 발생합니다.

초기 시도:

첫 번째 시도에서 정적 constexpr 멤버와 함수를 클래스 정의 내에 배치하여 이전 버전의 GCC에서 컴파일 오류가 발생했습니다. 두 번째 시도에서는 이러한 요소를 클래스 본문 외부로 옮겼지만 이후 버전에서 다시 문제에 직면했습니다.

설명:

C 표준은 constexpr static에 대한 특정 요구 사항을 지정합니다. 데이터 멤버. 이러한 멤버는 중괄호 또는 같음 초기화 프로그램을 사용하여 초기화해야 하며, 여기서 모든 할당은 상수 표현식입니다. "두 번째 시도"에서는 이 형식을 따르지 않았습니다.

해결책:

안타깝게도 정적 함수를 사용하여 constexpr 정적 데이터 멤버를 초기화하는 것은 현재 지원되지 않습니다. C 표준에 따라 가능합니다. 이는 constexpr 변수가 멤버 함수 본문 내에서 컴파일 타임 상수로 사용 가능해야 하기 때문입니다. 그러나 정적 함수는 클래스가 완료될 때까지 정의되지 않으므로 표현식이 상수 표현식이 될 수 없습니다.

GCC에서 관찰된 문제:

첫 번째 시도 유효해야 하지만 이전 버전의 GCC에서는 버그가 발생했을 수 있습니다. 최신 버전의 GCC에 액세스할 수 있다면 초기 코드를 다시 시도해 볼 가치가 있습니다.

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

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