Явный конструктор перемещения
Попытка скомпилировать следующий код:
struct Foo
{
explicit Foo ( void ) { }
explicit Foo ( Foo&& rhs ) { }
};
Foo bar ( void )
{
return Foo();
}
Получаем следующую ошибку:
вызов неявно удаленного конструктора копии 'Foo'
Ну, совершенно очевидно, что copy-ctor неявно удаляется.
Вопрос 1: Зачем компилятору нужен copy-ctorFoo
? Я ожидал, что возвращаемое значениеbar
быть построенным из значенияFoo()
с ход-ctor.
Затем я объявляю move-ctor неявным, и все успешно компилируется.
Вопрос 2: Почему компилятору больше не нужен copy-ctor, когда я повторно объявляю move-ctor как неявный?
Вопрос 3: Что значитexplicit
Ключевое слово означает в контексте копирования и перемещения ctors, поскольку оно определенно означает нечто отличное от контекста обычных ctors.