以下代码可以正常使用。
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)转换为(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) - &gt;一个(Aproxy(AAproxy(10)))。那么从int到用户定义类型的隐式转换只发生一次?
答案 0 :(得分:2)
它只查找从类型A(它是什么)到类型B(它应该是什么)的直接转换。有很多方法可以将A从C转换为B,如果要这样做,问题就会变得无限制;更不用说那种模糊性很快就会出现。
答案 1 :(得分:1)
根据C ++标准,该语言将仅尝试使用1级隐式转换来解析用户类型断开连接。 &GT; 1级需要显式转换。
答案 2 :(得分:0)
您获得了大多数隐式的用户定义转换。