【发布时间】:2019-01-24 11:29:23
【问题描述】:
我无法理解为什么调用复制构造函数而不是编译错误。
我声明了两个类 A B ,它们是独立的。 A 不是基于/派生于 B。它们之间的唯一联系是在 B 中我使用将 B 转换为 A 的运算符 我已经定义了一个操作符 =,它将 B 的 const 引用作为参数。 在 main 中,我编写了以下 B = A 实例的实例。我预计会生成编译错误。但是运算符 = 被称为
class A {};
class B {
public:
// conversion from A (constructor):
B()
{
cout << "1." << endl;
}
B(const A& x)
{
cout << "4." << endl;
}
// conversion from A (assignment):
B& operator= (const B& x)
{
cout << "3." << endl;
return *this;
}
// conversion to A (type-cast operator)
operator A() {
cout << "2." << endl;
return A();
}
};
int main()
{
A foo;
B bar; // calls constructor
bar = foo; // calls assignment
//foo = bar; // calls type-cast operator
char c;
c = getchar();
return 0;
}
我预计编译错误。但是打印了以下序列 1 4 3 。 我几乎不明白如何调用复制构造函数以及为什么 operator = 不会产生问题
谢谢
【问题讨论】:
-
我不清楚您为什么认为应该生成错误。什么样的错误?您认为该程序有什么问题?
-
我预计将生成以下编译错误 39:6: 错误: no match for 'operator=' (operand types are 'B' and 'A') 39:6: note: Candidate is : 23:5: 注意: B& B::operator=(const B&) 23:5: 注意: 参数 1 没有从 'A' 到 'const B&' 的已知转换
标签: c++ constructor operator-keyword