Constexpr이 아닌 표준 라이브러리 함수를 Constexpr을 준수하는 컴파일러 확장으로 취급하고 있습니까?
현재 C 표준에서는 표준 라이브러리 함수를 다음과 같이 선언해야 합니다. constexpr은 명시적으로 필요한 경우에만 사용됩니다. 그러나 이전 초안에서는 다르게 제안했습니다.
C 11 및 표준 초안
C 11 개발 과정에서 비constexpr 표준 라이브러리 함수를 다음과 같이 명시적으로 처리하는 것을 목표로 하는 제안이 있었습니다. constexpr. 엄격한 적합성 모드에서 이 기능을 지원하기로 한 GCC의 결정은 이 초안을 기반으로 한 것입니다.
C 14의 합의 전환
그러나 C 14 개발 중에 합의가 바뀌었습니다. 제안이 수정되었으며 최종 표준에서는 구현이 명시적으로 요구되지 않는 한 표준 라이브러리 함수 constexpr을 선언하는 것이 금지되어 있다고 명시하고 있습니다.
이 변경은 SFINAE가 이를 활용하여 다양한 구현을 생성할 수 있으므로 구현 전반에 걸쳐 다양한 동작에 대한 우려에서 비롯됩니다. 동일한 코드에 대한 결과입니다.
다음에 대한 적합성 GCC
이 경우 GCC의 현재 구현은 C 14 표준을 위반하므로 비준수 확장입니다. 적합성을 달성하려면 GCC는 엄격한 적합성 모드에서 경고를 발행하거나 이 기능을 비활성화해야 합니다.
내장
컴파일러 내장 함수는 표준 라이브러리 함수와 달리 이 항목에서 제외됩니다. 표준에 포함되지 않기 때문입니다. 따라서 일반적으로 내장 함수를 constexpr로 처리하는 것이 허용됩니다.
위 내용은 비 Constexpr 표준 라이브러리 함수에 대한 GCC의 Constexpr 처리는 적합한 확장입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!