매개 변수. 왜이 규칙은 보통 X 유형의 문자열을 비교할 수 있도록 허용합니까? 이 행동이 바람직하지 않습니까?시맨틱 검사는 C++ 프로그래밍 언어의 페이지 (340)에
2
A
답변
2
주어진 예는 다음과 같습니다
template<class T, class C = Cmp<T> >
int compare(const String<T>& str1, const String<T>& str2)
{
// ... compare using C
}
아이디어는 클래스 템플릿 Cmp
정의 또는 일부 T
불법되지 않을 수 있다는 점이다. 이 경우, 사용자 정의 비교 클래스 템플릿을 전달할 수 있습니다
compare<char, MyComparer>(str1, str2);
당신이 실제로 컴파일 할 경우 Cmp
가 사용되지 않으며 검사하지 않습니다, 그렇게한다면
0
예를 들어 매개 변수의 기본값이 X이지만 T를 지정하면 X의 의미가 검사되지 않습니다. 이것은 X가 컴파일되지 않을 수도 있기 때문에 중요합니다 (X에서 정의 할 수없는 연산자가 있기 때문에).
template <class T = int>
struct foo
{
static int bar(T x) { return x.size(); }
}
int main()
{
std::cout << foo<std::string>::bar("hello") << std::endl;
}
int에 .size()가 정의되어 있지 않아도 오류가 발생하지 않습니다. int의 기본 매개 변수가 실제로 사용되지 않기 때문에 오류가 발생하지 않습니다.
귀하의 질문에 답변하십시오. X를 비교할 수 있다고 말하는 것이 아닙니다. T를 사용하면 X를 사용할 수 없기 때문에 X를 비교할 수 있는지 여부는 중요하지 않습니다.
관련 문제
- 1. 프로그래밍 언어의 기호 빈도
- 2. 프로그래밍 언어의 엔디 언
- 3. C 프로그래밍 언어의 함수에서 포인터 전환
- 4. C 프로그래밍 언어의 링크 목록에있는 chararrays 비교하기
- 5. 기능적 프로그래밍 언어의 CMS
- 6. 프로그래밍 언어의 파서 소스?
- 7. 프로그래밍 언어의 파서는 무엇을해야합니까?
- 8. 팬텀 프로그래밍 언어의 첫인상?
- 9. 프로그래밍 언어의 프리미티브
- 10. 프로그래밍 언어의 코드 예제
- 11. 파이썬 프로그래밍 언어의 어휘 분석
- 12. 시스템 프로그래밍 언어와 응용 프로그래밍 언어의 차이점
- 13. 프로그래밍 언어의 내부 동작 이해
- 14. 수학 및 프로그래밍 언어의 수렴
- 15. Icon 프로그래밍 언어의 장단점은 무엇입니까?
- 16. 다중 언어의 여러 프론트 페이지
- 17. B-Method는 전통적인 프로그래밍 언어의 대안입니까?
- 18. c 또는 C++ 언어의 rect
- 19. C 언어의 한정어는 무엇입니까?
- 20. C 언어의 함수
- 21. C 프로그래밍 언어의 데이터 구조와 알고리즘을 사용하는 메모리 내장 데이터베이스
- 22. D 프로그래밍 언어의 내부 기수 정렬
- 23. XML 및 문자열 조작을위한 프로그래밍 언어의 장단점
- 24. 순전히 함수형 프로그래밍 언어의 이중 연결된 목록
- 25. 객체 지향 프로그래밍 언어의 관계형 기능
- 26. 동시 프로그래밍 언어의 일관성 모델 선택
- 27. 프로그래밍 언어의 기본 기능에 의존하는 것이 현명한가요?
- 28. 자체 코드를 실행하는 프로그래밍 언어의 클래스
- 29. 검사는 실존
- 30. C 언어의 long double 읽기