是什么决定了构造函数还是强制转换运算符?

时间:2018-04-16 14:21:52

标签: c++

当我使用下面的代码时,首先给构造函数赋予优先级,而不是强制转换运算符。是否有任何优先权来定义哪个将被首先调用?

 #include<iostream>
 using namespace std;
 class C1;
 class C2
 {
      int x;
 public:
     operator C2()
     {
       C2 temp;
       cout<<"operator function called"<<endl;
       return temp;
    }
 };
class C1
{
   int x;
public:
   C1():x(10){}
   C1(C2)
  {
    cout<<"constructor called"<<endl;
  }
};
 int main()
{
  C1 obj1;
  C2 obj2;
  obj1=obj2;
}

输出:

  

构造函数名为

1 个答案:

答案 0 :(得分:2)

编译器没有理由调用C2::operator C2(),因为C2对象已经是C2类型。

每当需要副本时,编译器都会调用复制构造函数X(X const&)或移动构造函数X(X&&),而不是X::operator X()

仅当参数的类型与用于初始化参数的参数的类型不匹配时,才使用转换运算符和转换构造函数。有关详细信息,请参阅implicit conversion