Вы определили явный конструктор копирования, но функции
Vector Vector::operator+(const Vector& v) const
и
Vector Vector::operator-(const Vector& v) const
должны возвращаться по значению и больше не могут из-за explicit
(в Другими словами, они не могут скопировать tmp
в возвращаемый объект).
Я также проверял новые вещи с C ++ 11 и обнаружил, что могу объявить мой конструктор как движущийся конструктор
blockquote>explicit Vector(const Vector&& v);
, и код компилируется просто отлично. Если я это сделаю, мне нужно иметь как скопировать, так и переместить конструкторы?Не уверен, что я понимаю, что вы имеете в виду здесь. У вас будет такая же проблема, если вы объявите только явный конструктор перемещения (что не позволит компилятору генерировать конструктор копии по умолчанию). Я не могу создать «компилируемый» код.