簡體   English   中英

隱式轉換為用戶定義的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM