C
C++ geek
@cpp_geek3.7K подп.
1.9Kпросмотров
53.2%от подписчиков
6 января 2026 г.
statsScore: 2.1K
✂️ C++17: Перестаньте копировать строки! (std::string_view) Мы привыкли передавать строки в функции по константной ссылке: const std::string&. Нам кажется, что это эффективно, ведь мы не копируем объект, верно? Не всегда. 🛑 Если вы передаете в такую функцию обычный текст в кавычках (строковый литерал) или часть другой строки, C++ втайне от вас создаст временный объект std::string, выделит память в куче (heap allocation), скопирует туда данные и только потом передаст ссылку. Решение? std::string_view. 👀 Что это такое? std::string_view - это супер-легкий объект, который ничего не хранит сам. Он просто «смотрит» на существующую строку. Внутри него только указатель на начало текста и длина. Никаких аллокаций. Никаких копий. Ноль оверхеда. 🆚 Сравним: // 🐢 ПЛОХО (до C++17) void Log(const std::string& msg) { / ... / } // При вызове создается временный std::string! Log("Critical Error"); // 🚀 ХОРОШО (C++17) void Log(std::string_view msg) { / ... / } // Никаких аллокаций. Просто передаем указатель и длину. Log("Critical Error"); 🔥 Суперсила: Substrings без боли Самое вкусное начинается, когда нужно взять подстроку. ⚫️std::string::substr() - создает новую строку (копирование + аллокация). ⚫️std::string_view::substr() - просто сдвигает указатель и меняет размер (математическая операция за наносекунды). ⚠️ Осторожно! (Подводный камень) Так как string_view не владеет данными, а только смотрит на них, вы должны быть уверены, что исходная строка живет дольше, чем string_view. ⚫️ ✅ Использовать как аргумент функции. ⚫️ ❌ Возвращать из функции, если исходная строка была локальной переменной. 💡 Итог: Если вам нужно только «почитать» строку (в аргументах функции), почти всегда используйте std::string_view вместо const std::string&. #cpp #cpp17 #optimization #stringview #coding #tips ➡️ @cpp_geek
1.9K
просмотров
1838
символов
Да
эмодзи
Нет
медиа

Другие посты @cpp_geek

Все посты канала →
✂️ C++17: Перестаньте копировать строки! (std::string_view) — @cpp_geek | PostSniper