Когда я объявляю свой конструктор копий явным, вызов его с помощью = вместо() не компилируется. Вот мой код:Синтаксис вызова конструктора явного копирования
class Base
{
public:
explicit Base(){cout<<__PRETTY_FUNCTION__<<endl;}
explicit Base(Base& b){cout <<__PRETTY_FUNCTION__<<endl;}
};
int main()
{
Base a;
Base b=a;
}
Компилятор говорит:
error: no matching function for call to ‘Base::Base(Base&)’
Если изменить его
Base b(a);
Он отлично компилируется. Я думал, что C++ считает эти два стиля экземпляров одинаковыми. Если я удаляю явное ключевое слово, он работает в обоих направлениях. Я предполагаю, что происходит некоторое неявное преобразование, когда я использую =. Так что мне здесь не хватает?
Это не то же самое. Первая - прямая инициализация, другая - копирование-инициализация. Конструкторы 'explicit 'не могут быть выбраны последними. –
PLS делает ваш конструктор копий принимать аргументы 'const &' – TemplateRex
Первоначально он был, но ошибка компилятора (выше) показывала не const. Поэтому просто для того, чтобы исключить это как возможность, я подобрал то, что показывал компилятор. –