Библиотека C/C++ разработчика
7.22K subscribers
688 photos
720 videos
8 files
986 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Почему C++ считает мой класс копируемым, если его нельзя скопировать?

Рассмотрим следующий сценарий:


template<typename T>
struct Base
{
// Есть конструктор по умолчанию
Base() = default;

// Не копируемый
Base(Base const &) = delete;
};

template<typename T>
struct Derived : Base<T>
{
Derived() = default;
Derived(Derived const& d) : Base<T>(d) {}
};

// Это assertion выполняется?
static_assert(
std::is_copy_constructible_v<Derived<int>>);


Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку:


void example(Derived<int>& d)
{
Derived<int> d2(d);
// msvc: error C2280: 'Base<T>::Base(const Base<T> &)':
// attempting to reference a deleted function
// gcc: error: use of deleted function 'Base<T>::Base(const Base<T>&)
// [with T = int]'
// clang: error: call to deleted constructor of 'Base<int>'
}

Итак, компилятор считает, что Derived<int> копируемый, но когда мы пытаемся его скопировать, выясняется, что это не так!

https://habr.com/ru/articles/920202/

#cpp #programming

👉 @cpp_lib
👍2🔥2
Media is too big
VIEW IN TELEGRAM
17 июля в 19:00 (Мск) приглашаем на онлайн-встречу,посвященную профессиональному развитию в сфере разработки электронных устройств.

Наша Академия программирования электронных устройств занимается повышением квалификации инженеров-радиоэлектронщиков.

На встрече обсудим:
- Кто занимается разработкой электронных устройств сегодня
- Самые востребованные направления в отрасли
- Актуальные возможности для профессионального старта
- Разные форматы работы в этой сфере

Также у вас будет возможность:
- Получить ответы на свои вопросы от эксперта
- Познакомиться с программами дополнительного профессионального образования в этой сфере

Регистрируйтесь прямо сейчас – количество мест ограничено!

После регистрации Вам придет бонус - "Принципы работы радиоэлектронщиков"

Ждем Вас!
👍4🔥21
🦀 Хотите стать Middle Rust-разработчиком?

Присоединяйтесь к открытому уроку «Техническое собеседование на Middle Rust разработчика» 24 июля в 20:00 МСК. В режиме онлайн разберем:

— Типичные вопросы, которые вам зададут на собеседовании.

— Задачи, которые дают кандидатам на уровне Middle.

— Частые ошибки на собеседованиях и способы их избежать.

❗️Этот урок — отличная подготовка к карьерному росту в разработке.

👉 Записаться на вебинар курса «Rust Developer. Professional»https://vk.cc/cNKKqz

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍1
Эффективное использование С++

Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++

источник

#cpp #programming

👉 @cpp_lib
👍86
Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов

В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time.

Представьте, если бы компилятор сам указывал «такой таблицы нет», «несуществующий столбец», «несовместимые типы» — до запуска программы. Такой подход полностью устраняет «сюрпризы» во время исполнения и исключает класс ошибок, связанных с генерацией SQL во время работы программы. Ваша программа даже не соберётся.

https://habr.com/ru/articles/929052/

#cpp #programming

👉 @cpp_lib
👍62
Dockerизированная toolchain в CLion с Conan

При разработке на C++ часто возникает необходимость воспроизводимой среды для сборки. Особенно если проект разрабатывается командой, где у каждого разработчика разные операционные системы и окружения. Тут на помощь приходит Docker.

Зачем это нужно?

- Единая среда для всех участников команды
- Изоляция от локальной системы
- Упрощение CI/CD

Интеграция с CLion
CLion поддерживает удалённые toolchain, включая Docker-контейнеры. То есть вы можете настроить сборку и отладку прямо в IDE, используя контейнер как основную среду.

Conan + Docker
Conan используется для управления зависимостями. Вместе с Docker это даёт:

- Контролируемую установку зависимостей
- Воспроизводимость билдов
- Возможность легко переключаться между разными окружениями

Краткие шаги настройки:

1. Создайте Docker-образ с нужными компиляторами и инструментами.
2. Настройте Toolchains в CLion, указав Docker как удалённую среду.
3. Подключите Conan для управления зависимостями.
4. Собирайте и отлаживайте проект прямо в контейнере.

Такой подход особенно полезен для кросс-платформенной разработки и больших командных проектов, где важна стабильность окружения.

https://schneide.blog/2025/06/23/dockerized-toolchain-in-clion-with-conan/

#cpp #programming

👉 @cpp_lib
👍51
C++ Std:: string Interface Overview

#cpp #programming

👉 @cpp_lib
👍15