Rozumiem, że kiedy definiujemy konstruktor klasy klasy, klasa jest niezbędna jako stany Rule of three. Ja również zauważyć, że argument konstruktora kopii jest zwykle const
jako następujące kody zilustrować:Dlaczego konstruktor kopiowania C++ musi używać obiektu const?
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
}
Moje pytanie brzmi: co się stanie, jeśli argument konstruktora kopii nie jest const:
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
}
Rozumiem, że w niektórych przypadkach, jeśli argument konstruktora kopiowania jest stały, druga implementacja zakończy się niepowodzeniem. Również jeśli argument konstruktora kopiowania jest stały, obiekt, który ma być skopiowany, nie zmieni jego zawartości podczas procesu. Zauważam jednak, że niektórzy ludzie nadal używają drugiej implementacji, a nie pierwszej. Czy są jakieś powody, dla których preferowana jest druga implementacja?
Dlaczego "A" należy zmodyfikować w 'ABC B (A)'? Ma to mało sensu i byłoby dość nieintuicyjne. – juanchopanza
Prawdopodobnie dlatego, że autor zapomniał zrobić to const. –
Jeśli przejdziemy przez twój tytuł, jest to duplikat: [Dlaczego argument konstruktora kopiowania jest stały] (http://stackoverflow.com/questions/1602058/why-is-the-copy-constructor-argument-const) (Jeśli dojdziemy do końca twojego tekstu, to nie jest). – jogojapan