As the subject, the code below is right.
#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();
}
It could not compile successfully:
<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)
| ~~~~~^
However, it could compile if replace the ABC(ABC& a)
by ABC(const ABC&)
.I know it has some relation with the keyword const
.But i could not figure out why.
You could check it on https://godbolt.org/z/jNL5Bd. I am a novice in C++.I would be grateful to have some help with this question.
Aucun commentaire:
Enregistrer un commentaire