Возвращение std::string_view из метода

У меня есть класс, хранящий вектор строк std::vector<std::string>. Как лучше определить его метод, возвращающий элемент по индексу?

Так?

[[nodiscard]] std::string get_by_index(size_type index) const;

Так?

[[nodiscard]] std::string_view get_by_index(size_type index) const;

Или как-то по-другому?


Ответы (1 шт):

Автор решения: HolyBlackCat

Если возвращать std::string, то строка всегда будет копироваться.
Небольшой плюс этого: пользователь не сможет поменять оригинальную строку const_cast-ом, даже если захочет. Но это уже паранойя...

Если возвращать std::string_view, то копии не будет. Но string_view вы не сможете передать (без копирования строки) в функцию, которой нужна строка с нулевым байтом на конце. Или в функцию с параметром const std::string &.

Третий вариант - возвращать const std::string &. Здесь не будет копирования, и вы всегда можете создать string_view из ссылки на строку, если захотите.
Небольшой минус: если вы вдруг захотите переделать класс, чтобы хранить строки не в std::string а где-то еще, то это можно будет сделать только изменив интерфейс.


Я бы использовал const std::string &.

→ Ссылка