Consteval 함수 및 함수 인수에 대한 템플릿 매개변수 종속성
C 17에서 템플릿 매개변수 선언 내에서 직접 상수를 반환하는 함수 사용 런타임 실행 제약으로 인해 금지됩니다. C 20에 consteval 함수가 도입되면 이러한 제약이 제거될 것으로 예상됩니다. 그러나 이렇게 하면 다음 코드가 성공적으로 컴파일될 수 있습니까?
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
아니요.
consteval 함수의 컴파일 시간 평가 요구 사항에도 불구하고 함수 정의 자체만 한 번 타이핑을 거칩니다. 따라서 함수 매개변수는 입력 불일치 가능성으로 인해 핵심 상수 표현식으로 처리되지 않습니다.
이러한 제한은 C 20 제안에서 더욱 강조되며, 해당 예에서 매개변수는 상수 표현식으로 간주되지 않도록 명시적으로 제외됩니다. :
<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 함수는 템플릿 매개변수가 함수 인수에 종속되는 것을 허용하지 않습니다. 매개변수에는 상수 표현식으로 필요한 입력 보장이 부족하기 때문입니다.
위 내용은 Consteval 함수는 C 20의 함수 인수에 대한 템플릿 매개변수 종속성을 활성화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!