Это может быть тривиальный вопрос, однако я не нашел удовлетворительного ответа и не могу понять, что происходит.Оператор перегрузки =
Предположим, у вас есть следующий код:
#include <iostream>
class Foo
{
public:
void operator=(int)
{
std::cout << "calling Foo::operator=(int)" << std::endl;
}
};
int main()
{
Foo a, b;
a = 10; // it works, of course, no questions here
a = b; // why does this work?
}
Поскольку я перегружен operator=
в Foo
, я бы ожидать линии a = b
внутри main()
плюнуть ошибку компилятора (то есть, a.operator=(b)
не должен составлять, как есть нет неявного преобразования от b
до int
, причем последний является типом ввода Foo::operator=(int)
). Почему задание a = b
бесшумно работает, и что именно происходит? Является ли компилятор генерирующим «default» operator=(const Foo&)
даже в том случае, когда я перегружал его?
Спасибо, вам кажется, что вы знаете стандарт :) У вас есть сек. номер? – vsoftco
Неявно объявленный оператор присваивания копии также будет определен как удаленный, если есть явно объявленный механизм перемещения или оператор назначения перемещения. – Brian
@Brian, спасибо, что я знал, был просто любопытством к оператору присваивания. Кажется немного странным, что нельзя указать «явный» для перегруженных операторов. Это может быть полезно, особенно когда вы имеете дело с объектами прокси. – vsoftco