[英]Implicit Conversion to a user-defined type
以下代碼可以正常工作。
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 ++標准,該語言將僅嘗試使用1級隱式轉換來解決用戶類型斷開連接。 > 1級需要顯式轉換。
您將獲得最多一個隱式用戶定義的轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.