Преимущества std :: string_view при передаче другой функции, принимающей std :: string - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующая вспомогательная функция, которая принимает строковое представление и возвращает поиск в unordered_map:

int Scanner::getOpCount(std::string_view op) {
    auto itr = Parser::opTable.find(op);
}

// in another file: 
const static std::unordered_map<std::string, OpEntry> opTable;

. Это не скомпилируется, потому что find ожидает строковый параметр, поэтомуЕдинственное решение, которое я нашел (поправьте меня, если я ошибаюсь), это обернуть op в string{op}.Однако меня беспокоит то, что std::string_view предназначался для облегчения передачи строки, но если мне нужно построить строку из нее независимо от тела функции, то есть ли какое-либо преимущество в определении getOpCount с помощью string_view параметр?Или это эквивалент, если не медленнее, const std::string&?

1 Ответ

0 голосов
/ 28 мая 2018

Вы должны правильно распространять свои потребности и ожидания в вашей цепочке API.Вашему низкоуровневому коду требуется a std::string;это не может работать ни с чем другим.Так что это должно распространяться через код, который взаимодействует с ним, и с другими.

Вы используете string_view, когда конечный потребитель этой строки может работать с string_view или его компонентами указатель + размер(или потребитель намерен скопировать строку независимо).Если он не может работать с string_view, то вы не можете его использовать.

...