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
또한 이 문서에서는 매개변수를 처리해서는 안 된다고 암시합니다. 핵심 상수 표현식으로 사용됩니다. 이를 보여주는 한 가지 예는 다음과 같습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!