Почему C++ считает мой класс копируемым, если его нельзя скопировать?
Рассмотрим следующий сценарий:
Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку:
Итак, компилятор считает, что Derived<int> копируемый, но когда мы пытаемся его скопировать, выясняется, что это не так!
https://habr.com/ru/articles/920202/
#cpp #programming
👉 @cpp_lib
Рассмотрим следующий сценарий:
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🔥2❤1
Курс по ООП в С++
введение
инкапсуляция
наследование
полиморфизм
шаблоны и метапрограммирование
источник
#cpp #programming
👉 @cpp_lib
введение
инкапсуляция
наследование
полиморфизм
шаблоны и метапрограммирование
источник
#cpp #programming
👉 @cpp_lib
👍9
🦀 Хотите стать Middle Rust-разработчиком?
Присоединяйтесь к открытому уроку «Техническое собеседование на Middle Rust разработчика» 24 июля в 20:00 МСК. В режиме онлайн разберем:
— Типичные вопросы, которые вам зададут на собеседовании.
— Задачи, которые дают кандидатам на уровне Middle.
— Частые ошибки на собеседованиях и способы их избежать.
❗️Этот урок — отличная подготовка к карьерному росту в разработке.
👉 Записаться на вебинар курса «Rust Developer. Professional» → https://vk.cc/cNKKqz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Присоединяйтесь к открытому уроку «Техническое собеседование на 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
Лекция 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
👍8❤6
Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов
В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time.
Представьте, если бы компилятор сам указывал «такой таблицы нет», «несуществующий столбец», «несовместимые типы» — до запуска программы. Такой подход полностью устраняет «сюрпризы» во время исполнения и исключает класс ошибок, связанных с генерацией SQL во время работы программы. Ваша программа даже не соберётся.
https://habr.com/ru/articles/929052/
#cpp #programming
👉 @cpp_lib
В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time.
Представьте, если бы компилятор сам указывал «такой таблицы нет», «несуществующий столбец», «несовместимые типы» — до запуска программы. Такой подход полностью устраняет «сюрпризы» во время исполнения и исключает класс ошибок, связанных с генерацией SQL во время работы программы. Ваша программа даже не соберётся.
https://habr.com/ru/articles/929052/
#cpp #programming
👉 @cpp_lib
👍6❤2
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
При разработке на 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
👍5❤1