У меня есть эти коды:
class Type2 {
public:
Type2(const Type1 & type);
Type2(int);
const Type2 & operator=(const Type2 & type2);
//....
};
...
Type1 t1(13);
Type2 t2(4);
t2=t1;
Как я понял, конструкторы Type2 с одним аргументом без ключевого слова explicit должны означать, что любые объекты Type1 или значения int могут быть неявно преобразованы в объекты Type2.
Но в последней строке t2=t1; MS Visual Studio выдает эту ошибку компиляции:
.... ошибка C2679: двоичный "=": не найден оператор, который принимает правый операнд типа "Type1" (или нет приемлемого преобразования)....
Похоже, что MS Visual Studio настаивает на том, чтобы t2=t1; соответствовал оператору присваивания с lhs=Type2 и rhs=Type1. Почему нельзя неявно преобразовать rhs в t2, а затем выполнить копирование с помощью оператора Type2=Type2?
const
, что устраняет двусмысленность. - person Omnifarious   schedule 19.06.2011