Я не могу понять, почему конструктор копирования вызывается вместо ошибки компиляции.
Я объявил два класса AB, которые являются независимыми.A не основан / не получен из B. Единственная связь между ними состоит в том, что в BI используется оператор, который преобразует B в AI, определил оператор =, который получает в качестве аргумента константную ссылку на B. В основном я написал следующий экземпляр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.Я с трудом понимаю, как вызывается конструктор копирования и почему оператор = не создает проблему
Спасибо