有人可以向我解释为什么在下面的代码中,如果我尝试实例化MyFooC,我会对Foo中的重载构造函数进行模糊调用吗?我的假设是用作构造函数参数的整数将被提升为unsigned int并已解决,但这显然是不正确的.
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;
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*nze 10
一个int可以转换为a double和a unsigned; 两者都被视为"扩大"转换,并具有相同的排名.作为一般规则,任何时候你重载,并且其中一个重载是一个整数类型int,当你有人试图传递一个积分时,最好还是重载,确保得到你想要的东西,并避免歧义.不变.
顺便说一句:虽然在上下文中很清楚你的意思,但在C++标准中,"促销"具有非常精确的含义,并且不包括转换int为unsigned int.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |