> 백엔드 개발 > C++ > 본문

C의 클래스 템플릿에 대해서만 기본 템플릿 인수가 허용되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-31 02:14:01
원래의
757명이 탐색했습니다.

Why are Default Template Arguments Only Allowed for Class Templates in C  ?

기본 템플릿 인수: 클래스 템플릿과 멤버 함수 템플릿

Q: 기본 템플릿 인수가 클래스 템플릿에만 허용되는 이유는 무엇입니까? 멤버 함수 템플릿에는 왜 안되나요?

예:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>
로그인 후 복사

C에 따르면 기본 템플릿 인수는 클래스 템플릿에만 유효합니다.

A: 기본 템플릿 인수는 실제로 유용합니다. 정렬 기능을 생각해 보세요.

<code class="cpp">template<typename Iterator, 
         typename Comp = std::less<
            typename std::iterator_traits<Iterator>::value_type>>
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
  ...
}</code>
로그인 후 복사

그러나 현재 C의 제한에 대한 이론적 근거는 독립 기능이 덜 중요하다고 간주되었던 초기 언어에 뿌리를 두고 있습니다. 결과적으로 기본값 사용을 배제하고 함수 인수에서 모든 템플릿 인수를 추론해야 했습니다.

이러한 제한은 코드 유연성과 멤버 함수 템플릿과의 호환성을 방해합니다. 이를 바로잡기 위해 C 0x는 함수 템플릿에 대한 기본 템플릿 인수를 도입했습니다.

C의 창시자인 Bjarne Stroustrup이 결함 보고서에 언급했듯이:

"기본 템플릿 금지 함수 템플릿에 대한 인수는 독립 함수가 2급 시민으로 취급되어 모든 템플릿 인수를 지정하지 않고 함수 인수에서 추론하도록 요구하던 시대의 잘못된 잔재입니다."

"제한으로 인해 프로그래밍 스타일이 심각하게 제약을 받습니다. 불필요하게 독립 함수를 멤버 함수와 다르게 만들어 STL 스타일 코드를 작성하기 어렵게 만듭니다."

위 내용은 C의 클래스 템플릿에 대해서만 기본 템플릿 인수가 허용되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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