当我使用下面的代码时,首先给构造函数赋予优先级,而不是强制转换运算符。是否有任何优先权来定义哪个将被首先调用?
#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;
}
输出:
构造函数名为
答案 0 :(得分:2)
编译器没有理由调用C2::operator C2()
,因为C2
对象已经是C2
类型。
每当需要副本时,编译器都会调用复制构造函数X(X const&)
或移动构造函数X(X&&)
,而不是X::operator X()
。
仅当参数的类型与用于初始化参数的参数的类型不匹配时,才使用转换运算符和转换构造函数。有关详细信息,请参阅implicit conversion。