|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在看C++primer讲转换的时候,讲二义性,我把他的例子哪来实现一遍发现一些问题求解答
#include<iostream>
class Double;
class Int //这是两个类之间可以相互转换而引起的二义性问题
{
public:
friend class Double;
Int(Double c); //因为Double是前向声明,所以这个构造函数的定义在后面
Int(int a=1):num(a){}
int num;
};
class Double
{
public:
Double(double d=1.1):num(d){}
operator Int()const {return Int(num);}
double num;
};
Int::Int(Double c)
{
num=2;
}
void print(Int base)
{
std::cout<<base.num;
}
int main(void)
{
Double a(9.0);
print(a); //理应来说应该发生二义性问题,是用 Double的转换操作符把a转换为Int的对象,还是把a作为形参调用Int的构造函数来创建Int的对象
//但是却通过编译了 ,并且是选择了把a作为形参调用Int的构造函数来创建Int的对象 why?
return 0;
} |
|