Почему конструктор копии должен принять ее параметр ссылкой в C++?

Почему конструктор копии должен быть передан ее параметр ссылкой?

112
задан artm 6 April 2019 в 00:17
поделиться

4 ответа

Потому что, если это не по ссылке, то по значению. Для этого вы делаете копию и для этого вызываете конструктор копирования. Но для этого нам нужно создать новое значение, поэтому мы вызываем конструктор копирования и так далее ...

(У вас будет бесконечная рекурсия, потому что «чтобы сделать копию, вам нужно сделать копию». )

172
ответ дан 24 November 2019 в 02:48
поделиться

Он будет бесконечно рекурсивным, если вы передадите его по значению

12
ответ дан 24 November 2019 в 02:48
поделиться

Потому что передача по значению вызовет конструктор копирования :)

65
ответ дан 24 November 2019 в 02:48
поделиться

Альтернативой передаче по ссылке является передача по значению. Передача по значению - это действительно передача по копии. Конструктор копирования необходим для создания копии.

Если бы вам пришлось делать копию только для вызова конструктора копирования, это было бы загадкой.

(Я думаю, что в компиляторе может возникнуть бесконечная рекурсия, и вы никогда не получите такую ​​программу.)

Помимо рациональных причин, это запрещено стандартом в §12.8 / 3:

Объявление конструктора для класса X неверно сформировано, если его первый параметр имеет тип (необязательно cv - квалифицированный) X и либо нет другие параметры или все остальные параметры имеют аргументы по умолчанию.

21
ответ дан 24 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: