> 백엔드 개발 > C++ > C에서 특수화할 수 없는 `std` 네임스페이스의 템플릿은 무엇입니까?

C에서 특수화할 수 없는 `std` 네임스페이스의 템플릿은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-31 20:13:02
원래의
310명이 탐색했습니다.

 What Templates in the `std` Namespace Cannot Be Specialized in C  ?

네임스페이스 std 전문화에 대한 제한

소개

std 네임스페이스는 C에서 매우 중요합니다. 기본 라이브러리 및 템플릿을 수용합니다. 그러나 사용자는 이 네임스페이스 내에서 허용되는 사용자 정의와 금지된 사용자 정의 사이의 경계가 어디인지 궁금해할 수 있습니다. 이 글에서는 std에서 특수화할 수 없는 템플릿에 대해 조명하겠습니다.

금지된 템플릿

C 표준에 따르면 std 내의 특정 템플릿은 명시적으로 특수화할 수 없습니다. 여기에는 다음이 포함됩니다:

  • numeric_limits: 산술이 아닌 표준 유형(예: complex)에는 금지됩니다.
  • shared_ptr: 필수 CopyConstructibility, CopyAssignability 및 LessThanComparability
  • weak_ptr: CopyConstructibility 및 CopyAssignability 필요
  • std::hash: 전문화는 해시 클래스 템플릿 요구 사항을 충족해야 합니다
  • : 이 하위 절 내의 모든 클래스 템플릿에 특수화를 추가하는 정의되지 않은 동작(제한된 common_type 특수화 제외)
  • 로캘: 특정 필수 특수화가 존재합니다
  • istreambuf_iterator: 간단한 복사 생성자, constexpr 기본 생성자 및 간단한 소멸자가 필요합니다
  • 복잡한: 다른 유형으로 인스턴스화하기 위한 정의되지 않은 효과 float, double 또는 long double
  • atomic보다: 삭제된 복사 생성자, 삭제된 복사 할당 연산자 및 constexpr 값 생성자
  • unary_function이 필요하며 binary_function: 더 이상 사용되지 않습니다. 전문화할 수 없습니다

일반 제한

금지된 템플릿 외에도 C 표준에서는 다음 제한 사항을 강조합니다.

  • 명시적으로 지정하지 않는 한 std 또는 해당 하위 네임스페이스 내에서 무엇이든 선언하거나 정의하는 정의되지 않은 동작입니다.
  • 특수화는 사용자 정의 유형에 의존하고 원본 템플릿의 표준 요구 사항을 충족하는 경우에만 std에 추가할 수 있습니다.
  • 멤버 함수, 멤버 함수 템플릿 또는 std 라이브러리 클래스의 멤버 클래스 템플릿의 명시적 특수화는 금지됩니다.
  • 명시적 인스턴스화는 사용자 정의 유형 이름에 의존하고 표준을 충족하는 경우에만 허용됩니다. 원본 템플릿 요구 사항

위 내용은 C에서 특수화할 수 없는 `std` 네임스페이스의 템플릿은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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