Consteval 함수가 함수 인수에 의존하는 템플릿 매개변수를 활성화할 수 있나요?
C 17에서 아래 스니펫과 같은 constexpr 함수는 유효하지 않습니다.
<code class="cpp">constexpr int foo(int i) { return std::integral_constant<int, i>::value; }</code>
컴파일 시 foo의 평가에도 불구하고 컴파일러에서는 런타임 시 실행할 수 있어야 하므로 템플릿 인스턴스화를 방해합니다.
C 20에는 컴파일 시 평가를 시행하는 consteval 함수가 도입되었습니다. 이것이 다음과 같은 코드를 허용하는지 궁금할 수도 있습니다.
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
대답은 아니요입니다.
논문의 잠재적인 변경 사항은 비템플릿의 단일 입력을 변경할 수 없습니다. 기능 정의. 게다가 이 코드가 유효하다면 std::integral_constant
또한 이 문서에서는 다음 예를 통해 매개변수가 핵심 상수 표현식으로 처리되지 않음을 보여줍니다.
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, but that's okay. }</code>
본질적으로 함수 매개변수는 잠재적인 입력 불일치로 인해 항상 상수 표현식 상태가 부족합니다.
위 내용은 Consteval 함수는 함수 인수에 의존하는 템플릿 매개변수를 허용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!