Constexpr이 아닌 표준 라이브러리 함수를 Constexpr로 처리: 적합성 분석
constexpr이 아닌 표준을 처리하는 컴파일러 확장이 있는지 여부에 대한 의문이 생깁니다. constexpr과 같은 라이브러리 함수가 준수됩니다. 그러한 처리가 허용될 수 있다고 제안한 C 11 표준 초안의 허용에도 불구하고 후속 개발에서는 문제가 명확해졌습니다.
C 14 명시적 금지
C 14 , 초안 표준 섹션 17.6.5.6에서는 구현 시 명시적으로 요구되지 않는 한 표준 라이브러리 함수 서명을 constexpr로 선언해서는 안 된다고 명시적으로 명시하고 있습니다. 이 판결은 constexpr이 아닌 표준 라이브러리 함수를 constexpr로 처리하는 것을 금지합니다.
GCC 확장
GCC는 특정 내장 함수를 constexpr로 처리하는 확장을 구현했습니다. . 그러나 이 확장은 업데이트된 C 14 표준을 기반으로 부적합한 것으로 간주됩니다.
As-if 규칙 및 관찰 가능한 동작
처음에는 as- 규칙이 constexpr이 아닌 함수를 constexpr로 처리하는 것을 허용하는 경우. as-if 규칙을 사용하면 구현이 동일한 관찰 가능한 동작을 생성하는 한 표준 요구 사항에서 벗어날 수 있습니다. 그러나 함수의 constexpr 상태를 변경하면 SFINAE 테스트에서 입증된 것처럼 관찰 가능한 동작에 영향을 미치며, 동일한 코드를 사용할 때 다르게 동작합니다.
완화 준수
GCC 확장을 준수하는 경우 컴파일러는 다음과 같은 경우 엄격한 준수 모드(예: -std=c 11 -pedantic)에서 경고를 발행해야 합니다. constexpr이 아닌 표준 라이브러리 함수는 constexpr 컨텍스트에서 사용됩니다.
내장 예외
컴파일러 내장 함수는 표준에서 다루지 않으며 constexpr 함수 규칙에서 제외될 수 있습니다. 내장 내장 함수(예: __builtin_cos)를 constexpr로 사용하는 것이 잠재적으로 허용될 수 있습니다.
위 내용은 비 constexpr 표준 라이브러리 함수를 C 표준을 준수하는 'constexpr'로 처리하고 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!