c++ - 隐式转换为用户定义类型

标签 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) 被转换为 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/

相关文章:

c++ - 设置固定 FPS 不起作用

c++ - 在C++中连接两个字符

c++ - 合并两个 std::sets

c++ - Qt5 QFile::close() 写入速度非常慢

c++ - std::list 顺序有保证吗?

c++ - 如何将 C++ 库导入 Xcode Objective C 项目?

C++ "cin"只读取第一个字

c++ - 通过 "stitching"访问 C++ 中的变量及其名称

c++ - 如何从 QString 中读取分号分隔的某些值?

c++ - FIFO队列链表实现