C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
Привет! Меня зовут Бекхан, мне 28 лет. Узнайте обо мне больше, открыв картинку над постом или прочитав полный текст здесь.

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

Я всегда стараюсь глубоко и основательно разбираться в возникающих вопросах, и мне кажется, что это будет полезно и для вас.

Хотя постов в моем телеграм-канале пока не так много, я уверен, что с увеличением аудитории у меня будет больше мотивации делиться своим опытом и писать новые посты.

Подписывайтесь на мой телеграм-канал Bekhan Code, чтобы не пропустить полезные советы и инсайты по разработке игр.

Попасть в Bekhan Code
➡️ Унарный оператор +

Мало кто знает о возможностях унарного оператора + в C++. Он может использоваться для:

Перевода Enumeration в integer:

+AnEnumeratorValue


Это делает значение перечислителя типом integer, что полезно при перегрузке операторов для перечислений.

Получения значения переменной:

Унарный + позволяет использовать классы со встроенными статическими инициализаторами без внешнего объявления, создавая временный класс, не зависящий от типа.

Разложение массива на указатели. Вам необходимо передать два указателя какой-либо функции, однако вы наперед знаете, что ничего из этого не выйдет? В этом случае вам очень пригодится оператор

C++ Learning 👩‍💻
➡️ Злой друг программиста: переопределение ключевых слов

Переопределение ключевых слов — плохая практика программирования, но это возможно через препроцессор. Это может вводить баги, например, #define true false или #define else.

#define int float
#define float char


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

#define public private
#include "mylibrary.h"
#undef private


Это позволяет управлять доступом к библиотеке без её изменения, но требует осторожности.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning
👩‍💻
Приходите на C++ Zero Cost Conf

📍 27 июля в Москве и Ереване пройдет прикладная конференция С++ Zero Cost Conf 2024.

Практикующие эксперты из крупнейших компаний выступят с докладами, поделятся реальными кейсами и метриками:

🔴 Антон Полухин, руководитель группы разработки общих компонент в Яндекс Go. Обсудит новости со встречи Международного комитета по стандартизации языка С++ в Сент-Луисе и расскажет о планах на C++26 и C++29

🔴 Константин Владимиров, руководитель отдела компиляторов и средств разработки в Syntacore. Расскажет об интересных C++-решениях в генераторе llvm-snippy

🔴 Юрий Минаев, архитектор C++-анализатора в PVS-Studio. Поговорит о семантике C++ и покажет, как устроены таблица символов, внутреннее представление типов и поиск имён

🔴 Василий Куликов, ведущий разработчик в Яндексе. Рассмотрит на примере мьютекса основные проблемы реализации примитивов синхронизации во фреймворке userver

🔴 Алексей Веселовский, Senior-C++-разработчик в Align Technology. Поделится свежим докладом о сани...
➡️ Размещающий new

Размещающий new - это альтернативный синтаксис для оператора new, который размещает объект в уже выделенной памяти. Он используется для настройки vtable и вызова конструктора.

Размещающий new полезен для написания кастомных аллокаторов, оптимизирующих производительность. Он позволяет выделить большой блок памяти и последовательно размещать объекты без пробелов, что уменьшает фрагментацию памяти и снижает накладные расходы.

C++ Learning 👩‍💻
➡️ Ответвление с использованием декларации переменной

C++ включает синтаксическое сокращение для одновременного объявления переменной и разветвления по её значению.

Это выглядит как декларация переменной внутри условия оператора if или while, и одновременное присваивание ей значения.

C++ Learning 👩‍💻
🔥 Освой разработку ПО на QT и ОС Аврора

Пройди тест из 20 вопросов и проверь, насколько хорошо nы знаешь язык C++ и готов освоить QT и ОС Аврора .
Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработка прикладного ПО на Qt и ОС Аврора" от OTUS.

👉 ПРОЙТИ ТЕСТ: https://clck.ru/3BhEZf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Квалификаторы ссылки в методах

C++11 позволяет перегружать методы с использованием квалификатора ссылки, который находится в той же позиции, что и cv-квалификаторы (const и volatile квалификаторы).

Это влияет на то, какой метод будет вызван для объекта, в зависимости от типа this, – является ли он lvalue или же rvalue.

C++ Learning 👩‍💻
➡️ Static methods on instances

C++ позволяет вызывать статические методы из экземпляра таким же образом, как и из класса.

Это позволяет изменять нестатические методы экземпляра на статические без необходимости обновления записи вызова функции.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning
👩‍💻
🌎Программист, говори с миром на одном языке!

👉Узнайте больше о возможностях С на бесплатном вебинаре онлайн-курса «Программист С» — «Unicode в С»: регистрация

На вебинаре мы:
— подробнее познакомимся с интернациональным стандартом символов Unicode и низкоуровневым устройством его кодировок
— развеем несколько популярных мифов в области кодировок и посмотрим на инструменты языка C для работы с юникодом.

Занятие будет полезно всем программистам с опытом.

👉После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку

erid: LjN8KAAuV
➡️ Перегрузка ++ и --

В C++ имя функции пользовательских операторов — это сам символ оператора.
Унарные и бинарные операторы (- и -) различаются по количеству аргументов.
Унарные операторы инкремента и декремента (++, --) имеют одинаковую сигнатуру.
Для различия постфиксных операторов ++ и -- используется фиктивный аргумент int.
Постфиксные операторы ++ и -- принимают фиктивный аргумент int как флаг для компилятора.

C++ Learning 👩‍💻
🚀Успейте за ростом рынка IoT!

👉Узнайте больше об internet of things на бесплатном вебинаре онлайн-курса «IoT Developer» - «Учет энергоресурсов в платформе ThingsBoard»: регистрация

На занятии рассмотрим решение учета энергоресурсов (вода, газ, э/э, тепло), познакомимся с реализацией демо проекта на платформе ThingsBoard:
1. Подключение устройств
2. Создание сущностей
3. Разработка цепочек правил
4. Разработка дашборда

🤝Понравится урок — продолжите обучение на курсе по спеццене и даже в рассрочку!

erid: LjN8KXW8x
➡️ Функции в качестве параметра шаблона

Параметром шаблона могут быть конкретные целые числа.

Параметром шаблона также могут быть конкретные функции.

Это позволяет компилятору встраивать вызовы для этих функций в коде инстанцированного шаблона для более эффективного выполнения.

В примере ниже, функция memoize() в качестве шаблонного параметра получает функцию и вызывает эту функцию для новых значений аргумента.

Старое сохранённое значение аргумента берётся из кеша.

C++ Learning 👩‍💻
Хотите узнать, какой алгоритм сортировки быстрее и эффективнее? Присоединяйтесь к нашему открытому уроку!

Тема: Визуальное сравнение 4-5 алгоритмов сортировок.
Дата: 15 июля в 20:00 мск.

На занятии мы подробно рассмотрим два популярных алгоритма сортировки: Выбором и Пирамидальной. Разберём их по различным критериям, включая сложность, количество обменов, стабильность и адаптивность.

Мы напишем и сравним алгоритмы по их быстродействию. Этот урок идеально подходит для студентов, разработчиков и всех, кто хочет углубить свои знания в области алгоритмов сортировки.

🔥 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

🔴 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: https://otus.ru/lessons/algorithm/?utm_source=telegram&utm_campaign=algo&utm_medium=cpm&utm_term=learning_pluses&utm_content=lesson_15-07-2024_usp-algo_algo_aitext_no-headline_aida_long_aibanner_lesson-ba...
➡️ Шаблонный параметр типа

Параметры типа могут иметь и свои параметр типа. Это позволяет при инстанцировании передавать шаблонные классы без указания параметров типа шаблона.

Рассмотрим пример:

template<typename T>
struct Cache { ... };

template<typename T>
struct NetworkStore { ... };

template<typename T>
struct MemoryStore { ... };

template<typename Store, typename T>
struct CachedStore
{
Store store;
Cache<T> cache;
};

CachedStore<NetworkStore<int>, int> a;
CachedStore<MemoryStore<int>, int> b;


Структура CachedStore содержит cache и store одного типа данных. Однако при создании CachedStore нужно дважды указывать тип данных (например, int), что не гарантирует их согласованности. Хотелось бы указывать тип данных единожды, чтобы избежать несоответствия, но если опустить параметр типа для store, компилятор выдаст ошибку:

// Этот код не компилируется, потому что у NetworkStore и MemoryStore
// отсутствуют параметры типа
CachedStore<
...
➡️ Функциональные блоки try

Функциональные блоки try существуют для ловли исключений выброшенных при выполнении инициализационного списка конструктора.

Блок вокруг списка инициализации нельзя обернуть обычным блоком try-catch, потому что список существует вне тела функции. Чтобы исправить это, C++ позволяет использовать try-catch блок в качестве тела метода.

Довольно странный синтаксис, и он может использоваться не только в конструкторах, но и в определении любых функций.

C++ Learning 👩‍💻
🎯 Готовы открыть для себя мир мобильной разработки на ОС Аврора 5?

16 июля в 20:00 мск присоединяйтесь к нашему открытому уроку и узнайте все секреты!

ОС Аврора 5 — это передовая российская мобильная операционная система, готовая к использованию в самых амбициозных проектах. Хотите узнать, как её покорить? Тогда этот вебинар для вас!

На занятии мы познакомимся с ключевыми особенностями ОС Аврора 5 и погрузимся в её уникальную среду разработки приложений — Аврора IDE. Ознакомимся со структурой и конфигурацией приложений на этой платформе.

Вы увидите наглядную демонстрацию приложения, которое отправляет уведомления в графическую подсистему Lipstick.

Встречаемся в преддверии старта курса «Разработка прикладного ПО на Qt и ОС «Аврора».
Все участники вебинара получат специальную цену на обучение!

➡️ Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок: https://clck.ru/3BpWFY

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
➡️ WebKit

Так или иначе, почти все разработчики на разных этапах сталкиваются с необходимостью отображать web – элементы. Чтобы всё выглядело красиво и в коде, и в конечном отображении, а выполнение этой задачи не отнимало слишком много времени и сил, существует библиотека WebKit.

Некоторые программисты называют WebKit «чёрным ящиком», органично перерабатывающим html, css и JavaScript в полноценные веб-страницы.

🔗
Ссылочка на доку

C++ Learning 👩‍💻