Mediumc++17string-view
Что такое std::string_view и какие у него опасности?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::string_view (C++17) — не владеющий срез строки (ptr + length), не делает копий и не аллоцирует. Ускоряет передачу в функции. Но имеет опасности.
void log(std::string_view msg); // принимает string, const char*, substring — без аллокации
log("hi");
log(myString);
log(myString.substr(0, 5));
// ОПАСНОСТЬ: dangling
std::string_view sv = std::string("hi") + "!";
// временная строка умерла в конце выражения, sv висит — UB при чтенииОпасности:
- Dangling reference — если исходная строка уничтожится раньше view, UB;
- Не null-terminated — нельзя передать в C-функции без копии в string;
substrу view возвращает view (безопасно, но может удивить).
Правило: string_view — для параметров функции, не для хранения.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.