Я понимаю, что когда мы определяем конструктор экземпляра класса, это необходимо как Правило из трех состояний. Я также замечаю, что аргумент конструктора копирования обычно const
, поскольку следующие коды иллюстрируют:
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
}
Мой вопрос в том, что произойдет, если аргумент конструктора копирования не const:
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
}
Я понимаю, что в некоторых случаях, если аргумент конструктора копирования является const, вторая реализация завершится неудачей. Также, если аргументом конструктора копирования является const, тогда объект, который будет скопирован, не будет изменять его содержимое во время процесса. Однако я замечаю, что некоторые люди по-прежнему используют вторую реализацию, а не первую. Есть ли причины, по которым предпочтительна вторая реализация?