> 백엔드 개발 > C++ > Consteval 함수 때문에 함수 매개변수가 템플릿에 종속될 수 있나요?

Consteval 함수 때문에 함수 매개변수가 템플릿에 종속될 수 있나요?

Linda Hamilton
풀어 주다: 2024-10-23 17:46:41
원래의
233명이 탐색했습니다.

Can Function Parameters Be Template Dependent Because of Consteval Functions?

Consteval 함수가 함수 인수에 따라 템플릿 매개변수를 활성화할 수 있나요?

C 17에서 컴파일 시간 상수를 반환하는 constexpr 함수 정의 논리적으로 보일 수도 있지만 금지되어 있습니다. 컴파일러는 런타임 실행 지침을 요구하여 이러한 함수와 관련된 템플릿 인스턴스화를 방지합니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿