> 백엔드 개발 > C++ > 본문

Consteval 함수는 함수 인수에 의존하는 템플릿 매개변수를 허용할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-10-24 01:35:01
원래의
389명이 탐색했습니다.

Can Consteval Functions Allow Template Parameters Reliant on Function Arguments?

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 유형의 변수를 선언할 가능성이 열릴 것입니다. 이는 ODR(단일 정의 규칙) 측면에서 매우 제한적인 것으로 보입니다.

또한 이 문서에서는 다음 예를 통해 매개변수가 핵심 상수 표현식으로 처리되지 않음을 보여줍니다.

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

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!