> 백엔드 개발 > C++ > C 20 클래스 템플릿 생성자에 중복 템플릿 매개변수 목록이 허용됩니까?

C 20 클래스 템플릿 생성자에 중복 템플릿 매개변수 목록이 허용됩니까?

DDD
풀어 주다: 2024-11-26 06:54:10
원래의
815명이 탐색했습니다.

Is Redundant Template Parameter Listing in C  20 Class Template Constructors Allowed?

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

중복 템플릿 매개변수 목록을 갖는 클래스 템플릿 생성자의 유효성에 대한 논쟁이 계속되었습니다. C 20 소개. 문제와 해결 방법은 다음과 같습니다.

C에서 17에서 아래 코드는 올바른 형식으로 간주되었습니다.

template<typename T>
struct S {
    S<T>();
};
로그인 후 복사

그러나 C 20에서는 동일한 코드가 -std=c 20 아래의 일부 컴파일러(예: gcc 트렁크)에서 오류를 유발합니다.

error: expected unqualified-id before ')' token
    3 |     S<T>();
                 ^
로그인 후 복사

C의 변화 20

C 20 표준에서는 클래스 템플릿 생성자 선언 구문의 변경을 요구합니다. 표준 호환성 섹션의 다음 델타는 이를 강조합니다.

[diff.cpp17.class]

...

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.
...
로그인 후 복사

기본적으로 이전 코드에 사용된 "중복" 템플릿 매개변수 목록 S()는 더 이상 허용되지 않습니다. 대신 주입된 클래스 이름 S를 사용해야 합니다.

template<typename T>
struct S {
    S(); // CORRECT C++20 syntax
};
로그인 후 복사

이유

이 변경의 이유는 다음을 허용하지 않음으로써 오류 위험을 줄이는 것입니다. 간단한 템플릿 ID를 사용합니다. 주입된 클래스 이름을 명시적으로 사용하도록 강제함으로써 컴파일러는 의도한 생성자를 더 정확하게 확인할 수 있습니다.

결론

C 20의 이 변경 사항은 버그로 간주되지 않습니다. 가 아니라 클래스 템플릿 생성자 선언의 명확성과 정확성을 높이기 위한 의도적인 주요 변경 사항입니다. 이로 인해 이전 구문에 의존하는 기존 코드와의 호환성 문제가 발생할 수 있지만 궁극적으로 C 애플리케이션의 전반적인 안전성과 신뢰성이 향상됩니다.

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

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