vector<int> & get_numbers() const;
Определенно не это. Вам будет трудно вернуть ссылку на неконстантную ссылку на член из константной квалифицированной функции-члена.
vector<int> get_numbers() const;
Это вариант. Но есть соображения:
- Невозможно изменить член, используя этот подход. Это хорошо, если вам не нужно изменять их.
- Это требует, чтобы вы копировали вектор при каждом обращении к получателю. Это может быть потенциально очень дорогой операцией.
Чтобы избежать ненужного копирования, вместо этого вы можете вернуть ссылку на const:
const vector<int> & get_numbers() const;
Чтобы избежать еще более ненужного копирования, разрешив построение перемещения из получателя вы можете использовать набор перегрузок:
const vector<int> & get_numbers() const & ;
vector<int> && get_numbers() &&;
Чтобы разрешить изменение, вы можете использовать неконстантную квалифицированную функцию-член, возвращающую ссылку:
vector<int> & get_numbers() & ;
Другой подход заключается в том, чтобы вообще не использовать геттер. Если пользователю класса нужен доступ к члену, возможно, он должен быть опубликован c.
Вместо этого вы можете предоставить другие формы ограниченного доступа. Путь Idiomati c C ++ состоит в том, чтобы иметь функции-члены begin
и end
, которые возвращают итераторы. Это позволит изменить содержимое вектора, не изменяя его размер.