Как уже отмечали другие, методы доступа должны быть постоянными. Как правило, если что-то может быть константно-квалифицированным, то должно быть константно-квалифицированным (конечно, есть несколько исключений, например, тип возврата функции, которая возвращает по значению не должно быть константно-квалифицированным, хотя оно обычно не имеет значения).
Однако есть еще одна проблема с написанным кодом: его очень легко использовать неправильно и случайно потерять время жизни вашего объекта. Подумайте, не объявили ли вы qwe
в main()
как:
QWE qwe(ABC());
ABC()
создает временный объект ABC
и передает его конструктору QWE
. Поскольку параметр конструктора abc_
является const ABC&
, он будет привязан к этому временному объекту. Затем вы привязываете ссылку на элемент abc
к временному объекту через инициализатор abc(abc_)
. Затем конструктор возвращает.
После возврата конструктора временный объект ABC
уничтожается, а qwe.abc
является висячей ссылкой: он больше не ссылается на объект.
Если класс собирается повесить на ссылку, которую вы передаете ему, вы должны предпочесть использовать указатель для типа параметра: таким образом, более ясно, что вам нужно беспокоиться о потенциальных проблемах жизни. Кроме того, члены класса ссылочного типа обычно более беспорядочные, чем они того стоят, поскольку они делают класс не присваиваемым (поскольку сами ссылки не присваиваются).