> 백엔드 개발 > C++ > C 11 SFINAE에서 '즉시 컨텍스트'를 구성하는 것은 무엇입니까?

C 11 SFINAE에서 '즉시 컨텍스트'를 구성하는 것은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-10 18:12:11
원래의
807명이 탐색했습니다.

What Constitutes the

C 11 SFINAE에서 "즉시 컨텍스트"는 정확히 무엇인가요?

C 11 대체에서는 "즉시 컨텍스트" 개념이 중요합니다. 실패는 오류가 아니다(SFINAE) 관용구. C 11 표준에 따르면 함수 유형과 해당 템플릿 매개변수 유형의 "즉시 컨텍스트에서" 유효하지 않은 유형 및 표현식만 추론 실패로 이어질 수 있습니다.

초기 이해

표준은 다음과 같은 메모에서 제한된 힌트를 제공합니다. "대체 유형 및 표현식의 평가는 클래스 템플릿 전문화, 함수 템플릿 전문화, 암시적 오류와 같은 부작용을 초래할 수 있습니다. 함수 생성 등" 이러한 부작용은 "즉시 컨텍스트"의 일부로 간주되지 않습니다.

결정 절차

"즉시 컨텍스트"에서 대체 오류가 발생하는지 확인하려면 다음을 따르세요. 절차:

  1. 필요한 템플릿 및 기능 식별: 인수 대체에 필요한 모든 템플릿과 암시적으로 정의된 함수를 고려하세요.
  2. 인스턴스화 전 단계: 대체 전에 이러한 템플릿과 함수를 생성한다고 상상해 보세요.
  3. 직접 오류 : 이 사전 인스턴스화 단계에서 오류가 발생하면 즉각적인 컨텍스트가 아니며 하드 컴파일이 발생합니다. 오류.
  4. 추론 실패: 사전 인스턴스화에 성공하면 대체 중 후속 오류는 오류가 아니지만 추론 실패로 이어집니다.

콘크리트 예

  • 예 1(하드 오류):
template<typename T>
void func(typename T::type* arg);
로그인 후 복사
로그인 후 복사
func<A<int&>&>(nullptr); // T::type* is invalid, causing a hard error.
로그인 후 복사
  • 예 2(공제 실패):
template<typename T>
void func(typename T::type* arg);
로그인 후 복사
로그인 후 복사
template<>
struct A<char> {};
로그인 후 복사
func<A<char>>(nullptr); // T::type* is not defined, leading to a deduction failure.
로그인 후 복사

결론

'즉각적인 맥락'은 다음과 같은 표현과 유형을 의미합니다. 필요한 사전 인스턴스화 단계를 넘어서 추가 템플릿이나 함수 생성을 요구하지 않고 해결됩니다. 이 사전 인스턴스화 단계에서 오류가 발생하면 하드 컴파일 오류가 발생하고, 후속 대체 단계에서 오류가 발생하면 추론 실패가 발생합니다.

위 내용은 C 11 SFINAE에서 '즉시 컨텍스트'를 구성하는 것은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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