누군가 다음 코드에서 MyFooC를 인스턴스화하려고 시도하면 Foo에서 오버로드 된 생성자에 대한 모호한 호출이 발생하는 이유를 설명해 줄 수 있습니까? 내 가정은 생성자 매개 변수로 사용 된 정수가 부호없는 정수로 승격되어 해결되었지만 분명히 잘못되었습니다.오버로드 된 생성자 간 모호성
template <typename t> class Foo
{
private:
t m_Value;
unsigned int m_Length;
public:
Foo(const t& Value) :
m_Value(Value),
m_Length(0)
{
}
Foo(unsigned int Length) :
m_Value(static_cast<t>(0)),
m_Length(Length)
{
}
};
int main()
{
Foo<double> MyFooA(32U);
Foo<double> MyFooB(32.0f);
//Foo<double> MyFooC(32);
return 0;
}
"프로모션"이 "전환"보다 선호되므로 "char"이 주어지면'int'를 사용하는 함수가'double'을 사용하는 함수보다 선호됩니다. 그러나 C++ 표준은 "프로모션"이라는 매우 제한적인 정의를 사용합니다. 기본적으로 프로모션은 양 피연산자가 같은 유형을 갖는 이진 연산자에서 발생하는 변환입니다. (예를 들어, 두 개의 'short'를 추가하면 추가 전에 'int'로 승격됩니다.) –
아, 저도 몰랐습니다. 고마워요. – Jodaka