Это ваша ответственность за оснащение вашего класса конструктором копирования, так что выражение Foo x(y);
приводит к объекту x
, который семантически равен y
.Никто не заставляет вас делать это каким-либо особым образом, и программа будет вести себя так, как вы , и скажете.
Рассмотрим этот упрощенный пример:
struct Foo
{
int value;
explicit Foo(int n) : value(n) { }
Foo(Foo const & rhs) : value(rhs.n / 5 - 32) { } // tee-hee
};
Foo make_it_so() { return Foo(40); }
int main() { Foo k = make_it_so(); }
Теперь в зависимостив зависимости от того, исключен или нет конструктор копирования, k.value
заканчивается либо 40
, либо -24
.Однако, поскольку вы написали конструктор копирования, вы, по сути, заявили, что считаете их семантически равными.
C ++ позволяет вам устанавливать правила игры, ноэто не защищает вас от попадания прямо в тюрьму.
(я знаю, что мой пример немного отличается от того, что вы задали в своем вопросе («передача аргументов»), но он предназначен для иллюстрации ваших обязанностей какавтор.)