Возвращение 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 шт):
Если возвращать std::string, то строка всегда будет копироваться.
Небольшой плюс этого: пользователь не сможет поменять оригинальную строку const_cast-ом, даже если захочет. Но это уже паранойя...
Если возвращать std::string_view, то копии не будет. Но string_view вы не сможете передать (без копирования строки) в функцию, которой нужна строка с нулевым байтом на конце. Или в функцию с параметром const std::string &.
Третий вариант - возвращать const std::string &. Здесь не будет копирования, и вы всегда можете создать string_view из ссылки на строку, если захотите.
Небольшой минус: если вы вдруг захотите переделать класс, чтобы хранить строки не в std::string а где-то еще, то это можно будет сделать только изменив интерфейс.
Я бы использовал const std::string &.