隐式转换为用户定义的类型

时间:2012-03-19 17:49:17

标签: c++

以下代码可以正常使用。

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到用户定义类型的隐式转换只发生一次?

3 个答案:

答案 0 :(得分:2)

它只查找从类型A(它是什么)到类型B(它应该是什么)的直接转换。有很多方法可以将A从C转换为B,如果要这样做,问题就会变得无限制;更不用说那种模糊性很快就会出现。

答案 1 :(得分:1)

根据C ++标准,该语言将仅尝试使用1级隐式转换来解析用户类型断开连接。 &GT; 1级需要显式转换。

答案 2 :(得分:0)

您获得了大多数隐式的用户定义转换。