Что касается темы, приведенный ниже код правильный.
#include<iostream>
class ABC
{ public:
ABC()
{
std::cout<< "default construction" << std::endl;
}
ABC(ABC& a)
{
std::cout << "copy construction" << std::endl;
}
};
int main()
{
ABC c1 = ABC();
}
Не удалось успешно скомпилировать:
<source>: In function 'int main()':
<source>:25:13: error: cannot bind non-const lvalue reference of type 'ABC&' to an rvalue of type 'ABC'
25 | ABC c1 = ABC();
| ^~~~~
<source>:10:14: note: initializing argument 1 of 'ABC::ABC(ABC&)'
10 | ABC(ABC& a)
| ~~~~~^
Однако он может скомпилироваться, если заменить ABC(ABC& a)
на ABC(const ABC&)
. Я знаю, что это имеет какое-то отношение к ключевому слову const
. Но я не мог понять, почему.
Вы можете проверить это на https://godbolt.org/z/jNL5Bd. Я новичок в C ++. Буду признателен за помощь в этом вопросе.