>  기사  >  백엔드 개발  >  C 20 클래스 템플릿 생성자의 중복 템플릿 매개 변수 목록이 이제 금지되는 이유는 무엇입니까?

C 20 클래스 템플릿 생성자의 중복 템플릿 매개 변수 목록이 이제 금지되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-28 02:10:10304검색

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now Forbidden?

C 20의 클래스 템플릿 생성자에서 중복 템플릿 매개변수 목록 제거

C 17에서는 클래스 템플릿 생성자가 다음을 갖는 것이 허용되었습니다. 중복 템플릿 매개변수 목록. 예를 들면 다음과 같습니다.

template<typename T>
struct S {
    S<T>();
};

그러나 C 20에서는 더 이상 그렇지 않습니다. 최근 변경 사항에 따라 클래스 템플릿의 모든 생성자는 주입된 클래스 이름을 사용해야 하므로 선언자에서 중복이 제거됩니다.

이 변경 사항은 C 20 초안의 호환성 섹션에 문서화되어 있습니다.

[diff.cpp17.class]
**Affected subclauses**: [class.ctor] and [class.dtor]
**Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor.
**Rationale**: Remove potentially error-prone option for redundancy.
**Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.

구체적으로 생성자 선언자의 id-expression은 이제 다음 중 하나를 취해야 합니다. 양식:

  • 클래스의 non-friend 멤버 사양 내의 멤버 선언에서 바깥쪽 클래스의 주입된 클래스 이름입니다.
  • non 내의 멤버 선언에서 -friend 클래스 템플릿의 멤버 사양, 바깥쪽 클래스 템플릿의 현재 인스턴스화를 명명하는 클래스 이름.

따라서, C 20의 올바른 생성자 선언은 다음과 같습니다.

template<typename T>
struct S {
    S();
};

위 내용은 C 20 클래스 템플릿 생성자의 중복 템플릿 매개 변수 목록이 이제 금지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.