У меня есть два класса, один из которых, например, представляет собой строку, а другой может быть преобразован в строку:Неоднозначное назначение оператора
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*)
. Почему разница?
Безумие. Это все, что я могу сказать о самых глубоких ямах C++ .... –