ch
Feedback
Библиотека C/C++ разработчика | cpp, boost, qt

Библиотека C/C++ разработчика | cpp, boost, qt

前往频道在 Telegram

Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA

显示更多

📈 Telegram 频道 Библиотека C/C++ разработчика | cpp, boost, qt 的分析概览

频道 Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 16 867 名订阅者,在 技术与应用 类别中位列第 7 486,并在 俄罗斯 地区排名第 38 903

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 16 867 名订阅者。

根据 26 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -98,过去 24 小时变化为 2,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 8.43%。内容发布后 24 小时内通常能获得 N/A% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 1 422 次浏览,首日通常累积 0 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 3
  • 主题关注点: 内容集中在 c++, навигация, компилятор, удалёнка, developer 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Все самое полезное для плюсовика и сишника в одном канале. Как запустить своего ии-агента: https://clc.to/tvpmDQ По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXS...

凭借高频更新(最新数据采集于 27 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

16 867
订阅者
+224 小时
-197
-9830
帖子存档
🏆 Задача на выходные: string_view vs string в API Перед тобой два варианта API логгера. Выбери лучший и обоснуй. Нет единственно верного ответа — важна аргументация.
#include <string>
#include <string_view>

// Вариант А
class LoggerA {
public:
    void log(const std::string& msg);
    void setPrefix(const std::string& prefix);
    std::string getLastMessage() const;
};

// Вариант Б
class LoggerB {
public:
    void log(std::string_view msg);
    void setPrefix(std::string_view prefix);
    std::string_view getLastMessage() const;
};

// Контекст использования:
// 1. log() вызывается тысячи раз в секунду
// 2. setPrefix() — один раз при старте
// 3. getLastMessage() — для диагностики
// 4. Логгер хранит последнее сообщение внутри
✏️ Напиши в комментариях: какой метод в каком варианте правильный, а какой — нет. Предложи «идеальный» LoggerC. 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #константная_правильность

📉 Кризис найма в IT: почему Яндекс и Сбер усложняют собеседования вместо того, чтобы их упрощать Казалось бы, если кандидато
📉 Кризис найма в IT: почему Яндекс и Сбер усложняют собеседования вместо того, чтобы их упрощать Казалось бы, если кандидатов не хватает — надо снижать барьеры. Но крупные игроки делают ровно наоборот: добавляют этапы, тесты и ИИ-оценку. За этим стоит холодная логика: лучше закрывать вакансию дольше, чем нанять человека, который уйдет через полгода. Смотрим, что именно изменилось в Яндексе и Сбере — и работает ли это. 👉 Статья 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #буст

🍙 views::take и views::drop — срезы в C++ Если views::transform превращает элементы, то views::take и views::drop управляют тем, сколько элементов обработать. Та же ленивая логика, никакого лишнего копирования. 🌸 views::take — первые N элементов
#include <ranges>
#include <vector>
namespace views = std::views;

std::vector<int> v = {10, 20, 30, 40, 50};

auto first_three = v | views::take(3);
// При итерации: 10, 20, 30
Лямбда не нужна — достаточно числа. Адаптер остановит итерацию сам, как только наберёт нужное количество. 🍪 take_while — берём пока условие истинно
auto while_lt_40 = v | views::take_while([](int x) { return x < 40; });
// При итерации: 10, 20, 30
В отличие от take(n), здесь количество элементов заранее неизвестно — решает предикат. 🍀 views::drop — пропустить первые N элементов
auto skip_two = v | views::drop(2);
// При итерации: 30, 40, 50

// drop_while — пропускаем пока условие истинно
auto after_twenties = v | views::drop_while([](int x) { return x <= 20; });
// При итерации: 30, 40, 50
❗️Важный нюанс: drop_while проверяет предикат только до первого несовпадения, а затем отдаёт все оставшиеся элементы подряд — даже те, что снова удовлетворили бы условию. Это не фильтр — это одноразовый пропуск. 🌱 Срез в середине: drop + take Комбинируя два адаптера, получаем аналог Python-срезов:
// Элементы с индекса 1 по 3 включительно (аналог v[1:4])
auto slice = v | views::drop(1) | views::take(3);
// При итерации: 20, 30, 40
Весь конвейер по-прежнему ленив: элементы не вычисляются до начала итерации. 🍙 Связка с filter и transform
struct Employee {
    std::string name;
    double salary;
    bool is_active;
};

std::vector<Employee> employees = { /* ... */ };

// Топ-2 активных сотрудника по имени
auto top_two = employees
    | views::filter([](const Employee& e) { return e.is_active; })
    | views::transform([](const Employee& e) { return e.name; })
    | views::take(2);
Ловушка: drop на бесконечном диапазоне
// OK — take ограничивает бесконечный iota
auto ok = std::views::iota(1) | std::views::take(5);
// 1, 2, 3, 4, 5

// OK — drop сам по себе безопасен, view создаётся без проблем
auto dropped = std::views::iota(1) | std::views::drop(3);

// ОПАСНО — итерирование без терминатора зависнет навсегда
for (auto x : dropped) { /* никогда не остановится */ }
drop на бесконечном диапазоне создаётся без проблем. Опасность — в цикле без ограничителя. Всегда добавляйте take или аналог, если диапазон потенциально бесконечен. 🐸 Продолжение следует... 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #константная_правильность

😎 Улучшения string и string_view в C++26, о которых давно мечтали string_view появился в C++17 как замена const string&. Но
😎 Улучшения string и string_view в C++26, о которых давно мечтали string_view появился в C++17 как замена const string&. Но кое-где он всё равно требовал лишних костылей. C++26 наконец это чинит без критических изменений. 📎 Что изменилось:stringstream + string_view (P2495R3) Раньше инициализировать stringstream из string_view можно было только через ручную конвертацию в string. Теперь — напрямую. • bitset + string_view (P2697R1) Та же история: конструктор bitset принимает string_view без лишней копии. Обходной путь через .data() был ещё и небезопасен из-за null-termination. • operator+ для string и string_view (P2591R5) Самое долгожданное. s + sv раньше просто не компилировалось — несмотря на то что s += sv работало. Причина: перегрузку придерживали для гипотетического string билдер, который так и не появился. Теперь наконец добавили свободные шаблонные функции. 👉 Подробнее тут Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #линкер_рекомендует

🔥 4 привычки кодеров Вот сколько общаюсь с разработчиками, постоянно слышу убеждение, что есть какой-то правильный способ пи
🔥 4 привычки кодеров Вот сколько общаюсь с разработчиками, постоянно слышу убеждение, что есть какой-то правильный способ писать софт. Все ищут секретную архитектуру, вылизывают паттерны, чтобы хоба и тимлид заплакал от счастья от твоего идеального кода. но, я собрал 4 привычки адептов «чистого кода», (которые обычно все практикуют) 🤡 • Бесконечный рефакторинг рабочего кода. Кажется, что так ты делаешь продукт лучше. Итог: жестко падаешь в перфекционизм. Переписываешь функцию по три раза, а бизнес ждет релиз. Закрываешь вкладку и в голове абсолютная пустота, время потрачено, а новых фичей ноль. • Упарывание в сложную архитектуру Сеньоры на ютубе обещают золотые горы, если внедрить микросервисы куда угодно. Итог: получаешь красивый overengineering-проект для мамы и 0 запущенных продуктов в срок, пока конкуренты клепают MVP на коленке. • Душные споры на ревью Неплохо, но как итог: ты пишешь полотна текста и тратишь часы на поиск глупой придирки к стилю, потому что банально фокус сместился с реальной задачи на эго. • Ручная микро-оптимизация Классика для тех, кто любит алгоритмы из универа. Итог: убиваешь дни жизни и выжимаешь миллисекунды, хотя бизнесу нужен был просто грязный, но рабочий скрипт еще вчера. Проблема в том, что ни один из этих путей не дает самого главного - скорости и проверки гипотез. Реальному рынку плевать на твой идеальный код за 3 дня. Бизнес предпочтет код от ИИ-агента за 5 минут, который уже завтра начнет приносить деньги. Хочешь обкатанный на нас лично и 100х учениках метод, как перестать кодить руками и начать делегировать задачи автономным системам? 👉 Заходи сюда, но у нас осталось всего 4 места, набор идет до завтрашнего дня. P. S. Если интересно еще что-нибудь почитать от меня, то заходите в «Азбуку Айтишника», там я рассказываю об айти-базе, также у меня там есть бесплатный гайд на 15 глав по ии-агентам

😎 Топ-вакансий для C++ разработчиков за неделю C++ red team developer — от 180 000 и до 450 000 ₽ Офис (Санкт-Петербург) C++ разработчик (CHYT) — Гибрид (Москва, Санкт-Петербург, Минск, Белград) Senior Rendering engineer C++ в 3D Карту — от 350 000 и до 400 000 ₽ Удалёнка/Гибрид (Санкт-Петербург, Москва) ✍️ Еще больше топовых вакансий — в нашем канале C++ jobs 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #буст

🔒 Планы hh.ru на 2026: привязка к Госуслугам и запрет накрутки опыта С 2026 года hh.ru делит соискателей на три категории: в
🔒 Планы hh.ru на 2026: привязка к Госуслугам и запрет накрутки опыта
С 2026 года hh.ru делит соискателей на три категории: верифицированные, «серые» и невидимые. Те, кто не привязал Госуслуги и не подтвердил опыт через ЭТК, рискуют отправлять отклики в пустоту.
Разбираем механику новой системы и даем рабочий план — что делать прямо сейчас, чтобы остаться в игре. 👉 Читать статью 🐸 Библиотека программиста

🗓️ Уже через пару часов стартует вебинар! Тема:
Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токены
Ждем вас сегодня в 19:00 по московскому времени. Не пропустите начало, будет много практики! 👉 Успей занять место

GCC 16: наконец-то читаемые ошибки компилятора C++ и нечитаемые ошибки компилятора — классика жанра. GCC 16 делает шаг в стор
GCC 16: наконец-то читаемые ошибки компилятора C++ и нечитаемые ошибки компилятора — классика жанра. GCC 16 делает шаг в сторону человекочитаемости. • Иерархическое отображение диагностик теперь включено по умолчанию (в GCC 15 это был экспериментальный флаг). • Несовпадение сигнатур больше не требует детективного расследования. Если параметр 3 — void* вместо const void*, компилятор ткнёт в конкретную строку. • SARIF-вывод вырос: вложенные logicalLocations с полным путём namespace → class → function. • Появился -fdiagnostics-add-output=experimental-html — HTML с подсветкой кода и визуализацией стека. -fanalyzer наконец понимает C++: exception handling и NRVO реализованы. Честно: на большой кодовой базе анализатор тихо капитулирует. Для проода — ещё не подходит. 👉 Полный разбор 🤖 Осталось 4 места на курс по ИИ-агентам. Набор закрывается 30 апреля. 🔗 Успеть на обучение 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #свежак

🍙 views::transform — ленивые преобразования в C++20 Если views::filter решает, какие элементы обработать, то views::transform — во что их превратить. Никакого копирования: это такая же ленивая обёртка над данными. 🌸 Базовое использование
#include <ranges>
#include <vector>
#include <string>
namespace views = std::views;

std::vector<std::string> words = {"hello", "world", "cpp"};

// Получаем длины слов
auto lengths = words | views::transform([](const std::string& s) {
    return s.size();
});
// При итерации: 5, 5, 3
Лямбда применяется к каждому элементу в момент итерации — ни раньше, ни позже. 🍪 Трансформация с изменением типа transform не обязан возвращать тот же тип. Из string можно получить size_t, из doubleint, из структуры — одно из её полей:
// Верхний регистр (#include <cctype>)
auto upper = words | views::transform([](std::string s) {
    for (char& c : s) c = std::toupper(c);
    return s;
});
// При итерации: "HELLO", "WORLD", "CPP"
Обратите внимание: здесь s принимается по значению — это намеренная копия, которую мы модифицируем. 🍀 filter + transform — классика Главная сила адаптеров — в их цепочке. Сначала отсеиваем ненужное, потом преобразуем то, что осталось:
struct Employee {
    std::string name;
    double salary;
    bool is_active;
};

std::vector<Employee> employees = {
    {"Алиса",  80000,  true},
    {"Борис",  95000,  false},
    {"Виктор", 72000,  true},
    {"Галина", 110000, true},
};

// Имена активных сотрудников с зарплатой выше 75 000
auto high_earners = employees
    | views::filter([](const Employee& e) { return e.is_active; })
    | views::filter([](const Employee& e) { return e.salary > 75000; })
    | views::transform([](const Employee& e) { return e.name; });

for (const auto& name : high_earners) {
    std::cout << name << "\n"; // Алиса, Галина
}
Весь конвейер ленив: ни одна лямбда не вызывается, пока не начнётся итерация. 🌱 pipe-синтаксис vs явный тип
auto v1 = words | views::transform([](const std::string& s) { return s.size(); });
auto v2 = std::ranges::transform_view{words, [](const std::string& s) { return s.size(); }};
🍙 Материализация в вектор transform_view — не контейнер. Чтобы получить std::vector, нужно явно материализовать:
// C++23
auto vec = words | views::transform([](const std::string& s) { return s.size(); })
                 | std::ranges::to<std::vector>();

// C++20
std::vector<size_t> vec(lengths.begin(), lengths.end());
Ловушка: несовпадение типа возврата
// UB — возвращается ссылка на временный объект
auto bad = words | views::transform([](const std::string& s) -> const std::string& {
    std::string upper = s;
    return upper; // dangling reference!
});

// Правильно — возвращаем по значению
auto ok = words | views::transform([](const std::string& s) {
    std::string upper = s;
    for (char& c : upper) c = std::toupper(c);
    return upper;
});
🐸 Продолжение следует... 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #константная_правильность

🍿 Иерархический FSM (HFSM) FSM (конечный автомат) — это не rocket science. Это просто способ явно описать: «в каком состоянии я нахожусь» и «что происходит при событии X». Пригодится везде: парсеры протоколов, UI-логика, игровые NPC, сетевые соединения. Самая простая реализация — enum + switch и в большинстве случаев этого может быть достаточно. Но, если состояний становится много, то пользоваться им становится не удобно и самое время задуматься об иерархическом автомате. HFSM позволяет группировать состояния. Применяется в игровых движках (вложенные состояния NPC), UI-фреймворках, протоколах с retry-логикой. 🧋 Реализация
#include <iostream>
#include <functional>
#include <map>
#include <optional>

enum class State { Idle, Running, Paused, Active, Stopped };
enum class Event { Start, Pause, Resume, Stop };

// Состояние может иметь родителя — тогда необработанные события
// делегируются вверх по иерархии
struct StateNode {
    std::optional<State>  parent;
    std::function<void()> onEnter;
    std::function<void()> onExit;
};

class HierarchicalFSM {
    State current_;
    std::map<State, StateNode>                 nodes_;
    std::map<std::pair<State,Event>, State>    transitions_;

public:
    explicit HierarchicalFSM(State init) : current_(init) {}

    void defState(State s,
                  std::optional<State> parent = std::nullopt,
                  std::function<void()> enter = {},
                  std::function<void()> exit  = {}) {
        nodes_[s] = {parent, std::move(enter), std::move(exit)};
    }

    void addTransition(State from, Event ev, State to) {
        transitions_[{from, ev}] = to;
    }

    bool process(Event ev) {
        // Ищем переход от текущего состояния вверх по иерархии
        std::optional<State> search = current_;
        while (search) {
            auto it = transitions_.find({*search, ev});
            if (it != transitions_.end()) {
                exitState(current_);
                current_ = it->second;
                enterState(current_);
                return true;
            }
            // Поднимаемся к родителю
            auto nodeIt = nodes_.find(*search);
            search = (nodeIt != nodes_.end()) ? nodeIt->second.parent
                                               : std::nullopt;
        }
        return false; // переход не найден
    }

    State state() const { return current_; }

private:
    void enterState(State s) {
        if (auto it = nodes_.find(s); it != nodes_.end())
            if (it->second.onEnter) it->second.onEnter();
    }
    void exitState(State s) {
        if (auto it = nodes_.find(s); it != nodes_.end())
            if (it->second.onExit) it->second.onExit();
    }
};

int main() {
    HierarchicalFSM fsm(State::Idle);

    // Active — виртуальный родитель для Running и Paused
    fsm.defState(State::Active);
    fsm.defState(State::Idle);
    fsm.defState(State::Running, State::Active,
        [] { std::cout << "[ENTER] Running\n"; },
        [] { std::cout << "[EXIT]  Running\n"; });
    fsm.defState(State::Paused, State::Active);
    fsm.defState(State::Stopped, std::nullopt,
        [] { std::cout << "[ENTER] Stopped\n"; });

    fsm.addTransition(State::Idle, Event::Start, State::Running);
    fsm.addTransition(State::Running, Event::Pause, State::Paused);
    fsm.addTransition(State::Paused, Event::Resume, State::Running);
    // Stop работает из любого Active-состояния
    fsm.addTransition(State::Active, Event::Stop, State::Stopped);

    fsm.process(Event::Start);
    fsm.process(Event::Pause);
    fsm.process(Event::Stop); // делегируется к Active -> Stopped
    return 0;
}
❗️ Добавь состояние — и оно автоматически наследует все переходы родителя. Не нужно дублировать Stop в каждое дочернее состояние. ✏️ Используешь FSM в продакшне? 🔥 Успейте на курс по ИИ-агентам! До 30 апреля осталось всего 4 места. 👉 Занять место по ссылке 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #шаблонный_код

🍴 Умные указатели в Qt: почему new никуда не делся Современный C++ давно говорит «забудь про new». Qt говорит «подожди». Ста
🍴 Умные указатели в Qt: почему new никуда не делся Современный C++ давно говорит «забудь про new». Qt говорит «подожди». Статья разбирает, почему иерархическая модель фреймворка и RAII плохо живут вместе. • QObject с родителем удаляется деструктором родителя. Если при этом он ещё и под unique_ptr — получишь double free: умный указатель не знает, что объект уже мёртв. • QWeakPointer как аналог слабой ссылки здесь не поможет — он работает только с QSharedPointer, который в Qt-иерархии использовать нельзя. Для этого есть QPointer<T>, который подписывается на destroyed() и обнуляется сам. • sender() возвращает QObject* — объект, которым уже кто-то владеет. Оборачивать результат в умный указатель — значит воевать с фреймворком. • В QML ситуация хуже: JS GC может удалить переданный из C++ объект без родителя, не предупредив. Краш случится через непредсказуемое время. Спасает только QQmlEngine::CppOwnership или явный родитель. • QScopedPointer имеет смысл перед std::unique_ptr в одном конкретном случае — QScopedPointerDeleteLater для объектов вроде QNetworkReply, которые нельзя удалять немедленно. В остальном std-аналоги легче и лучше интегрируются с внешними библиотеками. 💡 Решение предлагается в статье в виде правила: • есть родитель -> сырой указатель, • нет родителя -> QScopedPointer или std::unique_ptr • нужно следить за чужим объектом -> только QPointer • бизнес-логика без QObject -> чистый STL. ✏️ Статья 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #линкер_рекомендует

🇷🇺Разбираешься в радиочипах, оптике и связи? Забери до 2 000 000 рублей за свои инженерные навыки на турнире «Дронкон»🇷🇺
🇷🇺Разбираешься в радиочипах, оптике и связи? Забери до 2 000 000 рублей за свои инженерные навыки на турнире «Дронкон»🇷🇺 «Сталинские Соколы» открывают регистрацию на 3-й Всероссийский турнир «Дронкон», который пройдет с 8 по 14 мая. 2 направления для победы: - Инженерное дело: беспроводная связь, радиочипы и оптические системы + стратегия «Битва Дронов»; - Пилотирование: War Thunder, GeoGuessr и FPV-гонки + стратегия «Битва Дронов». Призовой фонд для победителей одной дисциплины: 🥇место – 2 000 000 рублей 🥈место – 1 500 000 рублей 🥉место – 1 000 000 рублей Награда за 4-8 места - 150 000 рублей Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан! Перелет, питание, проживание - за счет организаторов. 🇷🇺 Подать заявку и узнать подробности 🇷🇺

⚙️ Хотим сделать одну вещь — собрать нормальный список людей, за которыми реально следит C++ сообщество C++ — язык с историей
⚙️ Хотим сделать одну вещь — собрать нормальный список людей, за которыми реально следит C++ сообщество C++ — язык с историей. И у него есть живое сообщество людей, которые двигают его вперёд — через доклады, статьи, открытый код и просто посты в сети. ⁉️ Хотим узнать, кого читаете именно вы Не «обязательный список» — а реальный срез того, за кем следит наш канал. Может, откроем друг другу что-то новое. 📎 Формат простой: • Имя • Где (YouTube, блог, X, GitHub...) • Почему именно он/она 👇 Пишите, собирём в отдельный пост 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #междусобойчик

🔥 База по ИИ-агентам от научного сотрудника Сколтеха и НИУ ВШЭ Знакомьтесь, Екатерина Трофимова. Кандидат компьютерных наук,
🔥 База по ИИ-агентам от научного сотрудника Сколтеха и НИУ ВШЭ Знакомьтесь, Екатерина Трофимова. Кандидат компьютерных наук, ресерчер в Центре ИИ Сколтеха и лаборатории LAMBDA. Она объединяет глубокую академическую экспертизу и практику: знает, как ИИ-системы устроены «под капотом» и как встроить их в реальные сервисы (в т.ч. для Сбера). Мы попросили Екатерину собрать список мастхев материалов для тех, кто хочет проектировать агентов в проде. Сохраняйте список. 🛠 Стек и фреймворки: DSPy — алгоритмическая оптимизация промптов (вместо ручного подбора слов). Semantic Kernel и LangMem — инструменты для управления сессионной и долгосрочной памятью. MCP (Model Context Protocol) — новый стандарт от Anthropic для подключения агентов к вашим БД и локальным файлам. 📖 Документация, которую нужно знать: Anthropic Prompt Caching — как кэшировать контекст и радикально резать косты на API. OpenAI Agents SDK / Cookbook — лучшие практики работы с памятью. Augment — платформа для оптимизации работы ИИ-агентов и контроля токенов. 🔬 Хардкорные статьи и препринты (на выходные): Lost in the Middle — почему LLM «слепнут» на длинных текстах и забывают середину контекста. How Do Coding Agents Spend Your Money? — куда улетает бюджет при работе автономных кодинг-агентов. MemGPT — архитектура операционной системы для LLM с иллюзией бесконечной памяти. InjecAgent / AgentSentry — всё о безопасности и защите агентов от инъекций в промпты. Екатерина Трофимова — один из ключевых экспертов нашего курса AgentOps. На своих лекциях она детально разбирает, как проектировать инструменты для агентов, как агент принимает решения о вызове инструментов и какие ограничения возникают в реальном проде 🎁 Акция в честь старта продаж! Прямо сейчас при покупке Инженерного трека вы получаете полный доступ к материалам курса «Разработка ИИ-агентов» в подарок. 👉 Забрать 2 курса по цене 1 и начать обучение

🩹 Задача на выходные: const-итерация по Range
#include <ranges>
#include <vector>

void process(const auto& view) {
    for (auto x : view) { (void)x; }
}

int main() {
    std::vector<int> data = { 1, 2, 3, 4, 5 };
    auto pred = [](int x) { 
        return x % 2 == 0; 
        };

    auto filtered = data | std::views::filter(pred);
    process(filtered); // ❌ не компилируется
}
Объясни механизм: почему begin() const невозможен в принципе, а не по недосмотру комитета. 📍Навигация: ВакансииЗадачиСобесы Библиотека C/C++ разработчика #междусобойчик