>백엔드 개발 >C++ >Consteval 함수는 C 20의 함수 인수에 대한 템플릿 매개변수 종속성을 활성화할 수 있습니까?

Consteval 함수는 C 20의 함수 인수에 대한 템플릿 매개변수 종속성을 활성화할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-23 16:43:02605검색

Can Consteval Functions Enable Template Parameter Dependence on Function Arguments in C  20?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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