下面的代码工作正常。
class A
{
private:
int _value;
public:
class AProxy
{
public:
AProxy(int num):_num(num){}
int _num;
};
A(AProxy x):_value(x._num){}
int getvalue(){
return _value;
}
};
void func(A a)
{
cout<<"A is initialized with "<<a.getvalue()<<endl;
}
int main()
{
A a(10);
return 0;
}
a(10) 被转换为 a(Aproxy(10))
但是,下面的代码不起作用。
class A
{
private:
int _value;
public:
class AProxy
{
class AAProxy
{
public:
AAProxy(int num):_aanum(num){}
int _aanum;
};
public:
AProxy(AAProxy aa):_num(aa._aanum){}
int _num;
};
A(AProxy x):_value(x._num){}
int getvalue(){
return _value;
}
};
void func(A a)
{
cout<<"A is initialized with "<<a.getvalue()<<endl;
}
int main()
{
A a(10);
return 0;
}
a(10) -> a(Aproxy(AAproxy(10)))。所以从 int 到用户定义类型的隐式转换只发生一次?
最佳答案
它只寻找从类型 A(它是什么)到类型 B(它应该是什么)的直接转换。如果要这样做的话,从 A 到 C 到 B 的方法太多了,问题就变得无限大了;更不用说这样很快就会出现歧义。
关于c++ - 隐式转换为用户定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775211/