У меня есть два класса, один из которых, скажем, представляет строку, а другой может быть преобразован в строку:
class A {
public:
A() {}
A(const A&) {}
A(const char*) {}
A& operator=(const A&) { return *this; }
A& operator=(const char*) { return *this; }
char* c;
};
class B {
public:
operator const A&() const {
return a;
}
operator const char*() const {
return a.c;
}
A a;
};
Теперь, если я делаю
B x;
A y = x;
Он запускает конструктор копирования, который компилируется отлично. Но если я делаю
A y;
y = x;
Он жалуется на двусмысленное присваивание и не может выбирать между =(A&)
и =(char*)
. Почему разница?