读书人

关于自动重载的有关问题

发布时间: 2012-02-25 10:01:47 作者: rapoo

关于自动重载的问题
不太看得懂这个自动重载的程序。特别是函数g(1)的参数为什么可以是int??请高手帮忙解释,谢谢了!
class One{
int i;
public:
One(int ii=0,int=0):i(ii){}
};

class Two{
int x;
public:
Two(int xx):x(xx){};
operator One() const {return One(x);}
};

void g(One){}

int _tmain(int argc, _TCHAR** argv)
{
Two two(2);
g(two);
g(1);
}

[解决办法]
class One{
int i;
public:
explicit One(int ii=0,int=0):i(ii){} //加explicit, 要求只能显式调用
};

class Two{
int x;
public:
Two(int xx):x(xx){};
operator One() const {return One(x);}
};

void g(One){}

int _tmain(int argc, _TCHAR** argv)
{
Two two(2);
g(two);
g(1); //自动调用One的构造函数,编译失败,因为只能要求显式调用
g(One(1));//显式调用成功
}

[解决办法]
g(1)

因为

One(int ii=0,int=0):i(ii){}

所以

1 可以隐式转换成 One


[解决办法]
楼上的正解,
当你传一个整数的时候,编译器发现不是这个函数需要的参数,会对其进行类型转换。而此时,恰好可以通过One(1)
构造一个One对象出来.

读书人网 >C++

热点推荐