Приведенный ниже код невозможно скомпилировать.
#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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение