왜 유효한이 아니다?C++ 템플릿 클래스와 템플릿 기능
x=getMax(1, '2');
그러나 이들은
x=getMax(1,2);
이 템플릿 기능에는 형식 변환이 없다는 것을 의미합니까 유효?
이 유효하지 않습니다
x=GetMax::getMax(1, 2);
는 템플릿 클래스에 대한 것을 뜻, 유형을 지정해야합니다?
왜 유효한이 아니다?C++ 템플릿 클래스와 템플릿 기능
x=getMax(1, '2');
그러나 이들은
x=getMax(1,2);
이 템플릿 기능에는 형식 변환이 없다는 것을 의미합니까 유효?
이 유효하지 않습니다
x=GetMax::getMax(1, 2);
는 템플릿 클래스에 대한 것을 뜻, 유형을 지정해야합니다?
getMax(1, '2');
은 무엇을 반환해야합니까? int 또는 char?
당신은 쓸 수 : 그것에 대해 생각 :
template <class T1, class T2> T1 getMax (T1 a, T2 b) {
return (a>b?a:b);
}
을하지만 당신은 명시 적으로 타입 1을 반환하는 점에 유의, 무엇을 (100)는 문자 형식으로 변환 될 수 있기 때문에 getMax('1',1000)
같은 경우에 작동, 그리고하지 않을 수 있습니다 충분히 크지 않을 것이다.
클래스를 사용하기 때문에 후자는 유효하지 않습니다. 먼저 어떤 유형인지 명시해야합니다.이 메커니즘은 형식 공제 전에 먼저 작동합니다.
당신이 그것을 언급 한 경우가 작동합니다 :
class GetMax {
public:
template <class T>
static T getMax(T a, T b) {
return (a>b?a:b);
}
};
'2'를 암시 적으로 int로 변환 할 수없는 이유는 무엇입니까? – skydoor
@skydoor,'char' 또는'int'를 반환하고 싶다면 컴파일러는 어떻게 알 수 있습니까? –
@skydoor 같은 질문을 할 수 있는데, 왜 '1'을 암시 적으로 char로 변환 할 수 없습니까? –
1)이 형식 변환은하지만 형식 유추와 함께 작동하지 않습니다. 형식을 지정하면 (예 : getMax<int>(1,'2')
또는 getMax<char>(1,'2')
) 작동하지만 컴파일러는 getMax<int>
또는 getMax<char>
중 무엇을 사용할지를 결정할 수 없습니다.
2) 예, 템플릿 인수는 클래스 템플릿이 아닌 함수 템플릿에서만 유추됩니다.
표준 자체에는 초와 비슷한 문제가 있습니다. 'std :: pair'은 그 타입이 지정되어야한다. 그래서'std :: make_pair (T1, T2)'함수가 있습니다. –
MSalters