Вопрос по подписи копировщика [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Вопрос по подписи копировщика [дубликат]

Сообщение Anonymous »

Приведенный ниже код невозможно скомпилировать.
#include

class Demo{
public:
Demo()=default;
Demo(const Demo&) = default;
Demo(Demo){}
};

Demo foo() {
Demo demo;
return demo;
}

int main() {
foo();
}

Вот на что жалуется компилятор:
:7:14: error: copy constructor must pass its first argument by reference
7 | Demo(Demo){}
| ^
| const &
1 error generated.

Итак, компилятор сообщает мне, что подпись конструктора копирования должна быть Demo(const Demo&), отличной от Demo(Demo). Я знаю, как исправить код и заставить его работать. Но я не совсем понимаю, почему бы компилятору не рассматривать Demo(Demo) как собственный конструктор, точно так же, как Demo(Demo, int), который видно ниже. Я очень растерялся, когда обнаружил, что приведенный ниже код работает хорошо
#include

class Demo{
public:
Demo()=default;
Demo(const Demo&) = default;
Demo(Demo, int){}
};

Demo foo() {
Demo demo;
return demo;
}

int main() {
foo();
}



Подробнее здесь: https://stackoverflow.com/questions/785 ... -copy-ctor

Вернуться в «C++»