C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
➡️ Использование библиотеки immer для работы с неизменяемыми структурами данных в C++

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

immer делает работу с данными безопаснее и эффективнее, особенно в многопоточной среде.

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

C++ Learning 👩‍💻
➡️ Использование библиотеки Magnum для создания кроссплатформенных графических приложений

Magnum — это современная библиотека C++ для разработки графических приложений. Она предоставляет мощный API для работы с OpenGL, OpenAL и другими мультимедийными ресурсами, позволяя создавать кроссплатформенные приложения, игры и интерактивные 3D-сцены.

Magnum идеально подходит для разработчиков, создающих графические движки или приложения с 3D-визуализацией.

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

C++ Learning 👩‍💻
➡️ Использование std::lcm и std::gcd для работы с наименьшим общим кратным и наибольшим общим делителем

std::lcm и std::gcd — это функции, добавленные в C++17, которые позволяют легко вычислить наименьшее общее кратное (НОК) и наибольший общий делитель (НОД) двух чисел. Они полезны при решении задач, связанных с арифметикой и оптимизацией.

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

C++ Learning 👩‍💻
➡️ Использование std::ranges::views::filter и std::ranges::views::transform для обработки контейнеров

std::ranges::views::filter и std::ranges::views::transform — это инструменты, добавленные в C++20, позволяющие выполнять ленивую обработку контейнеров. Они позволяют фильтровать и изменять элементы контейнеров, не создавая новых копий.

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

C++ Learning 👩‍💻
➡️ Использование std::unreachable для обозначения недостижимого кода

std::unreachable — это новая функция, добавленная в C++23, позволяющая указать компилятору, что определенный участок кода недостижим. Это может улучшить оптимизацию кода и сделать его более читаемым, помогая избежать предупреждений компилятора о возможных путях выполнения.

• std::unreachable полезен в ситуациях, когда вы уверены, что до определенного участка кода выполнение никогда не дойдет.

C++ Learning 👩‍💻
Вопрос на собеседовании

Что такое "RAII" (Resource Acquisition Is Initialization) и как это помогает в управлении ресурсами в C++?

Ответ ⬇️
"RAII" — это идиома, при которой инициализация объекта захватывает ресурс, а освобождение ресурса происходит автоматически при уничтожении объекта. Это гарантирует корректное освобождение ресурсов, таких как память или файловые дескрипторы, даже при исключениях.

🗣 Пример:
#include <iostream>

class File {
public:
File(const char* filename) {
file_ = fopen(filename, "w");
if (file_) {
std::cout << "Файл открыт.\n";
}
}

~File() {
if (file_) {
fclose(file_);
std::cout << "Файл закрыт.\n";
}
}

private:
FILE* file_;
};

int main() {
{
File file("example.txt");
// Работа с файлом
} // Файл автоматически закроется при выходе из блока

// Результат выполнения:
// Файл открыт.
// Файл закрыт.
}


C++ Learning 👩‍💻
➡️ Использование библиотеки Dragonbox для быстрого и точного преобразования чисел с плавающей точкой в строку

Dragonbox — это современная библиотека C++, которая обеспечивает чрезвычайно быстрое и точное преобразование чисел с плавающей точкой (float и double) в строковое представление. Она гарантирует корректность округления, что делает её отличным выбором для высокопроизводительных приложений.

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

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

C++ Learning 👩‍💻
➡️ Использование std::expected для обработки ошибок без исключений

std::expected — это новый шаблонный класс, добавленный в C++23, который предоставляет способ возвращать либо ожидаемое значение, либо информацию об ошибке. Он позволяет более эффективно обрабатывать ошибки без использования исключений, делая код более чистым и понятным.

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

C++ Learning 👩‍💻
➡️ Использование библиотеки NanoRange для работы с диапазонами в стиле C++20

NanoRange приносит функциональность диапазонов (Ranges) из C++20 в более ранние версии стандарта C++.

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

NanoRange идеально подходит для проектов, работающих на стандартах C++11, C++14 или C++17, но желающих использовать преимущества std::ranges.

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

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

C++ Learning
👩‍💻
Вопрос на собеседовании

Как работает RVO (Return Value Optimization) в C++, и в каких случаях оно не применяется?

Ответ ⬇️
RVO — это оптимизация, при которой компилятор устраняет временные объекты, возвращаемые из функции, что значительно снижает накладные расходы на создание копий. Однако, есть ситуации, когда RVO не применяется, например, при возврате различных объектов в зависимости от условий внутри функции.

🗣 Пример:
#include <iostream>

struct MyObject {
MyObject() { std::cout << "Создан объект\n"; }
MyObject(const MyObject&) { std::cout << "Скопирован объект\n"; }
MyObject(MyObject&&) { std::cout << "Перемещён объект\n"; }
};

MyObject createObject(bool flag) {
if (flag) {
return MyObject(); // RVO применяется
} else {
MyObject obj;
return obj; // RVO может не применяться
}
}

int main() {
MyObject obj1 = createObject(true);
MyObject obj2 = createObject(false);
}


C++ Learning 👩‍💻
➡️ Использование std::barrier для синхронизации потоков

std::barrier — это новый примитив синхронизации, добавленный в C++20, который позволяет координировать выполнение группы потоков. Каждый поток выполняет свою работу до определенной точки (барьера) и ждет, пока все остальные потоки достигнут этой же точки, после чего выполнение продолжается.

• std::barrier полезен в параллельных вычислениях, где важно, чтобы все потоки завершили определенную задачу перед переходом к следующей.

C++ Learning 👩‍💻
➡️ Использование библиотеки async_simple для работы с асинхронностью в C++

async_simple — это новая библиотека, которая предоставляет простой и эффективный способ работы с асинхронными операциями в C++. Она упрощает управление асинхронными задачами, улучшая читабельность и производительность кода.

async_simple идеально подходит для тех, кто хочет писать асинхронный код без сложных шаблонов и лишних зависимостей.

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

C++ Learning 👩‍💻
➡️ Использование библиотеки cppcoro для работы с корутинами в C++

cppcoro — это библиотека, предоставляющая набор инструментов для работы с корутинами в C++, включая асинхронные операции, таймеры, семафоры и другие примитивы синхронизации. Это упрощает написание асинхронного кода с поддержкой корутин, обеспечивая высокую производительность и читаемость.

cppcoro — отличный выбор для создания высокопроизводительных асинхронных приложений с использованием корутин.

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

C++ Learning 👩‍💻
Вопрос на собеседовании

Как работает Rule of Five в C++ и когда его следует применять?

Ответ ⬇️
Rule of Five говорит о том, что если ваш класс управляет ресурсами, вам нужно явно определить пять специальных методов: конструктор копирования, оператор присваивания копированием, конструктор перемещения, оператор присваивания перемещением и деструктор. Это важно, чтобы избежать утечек ресурсов или неправильного управления памятью при копировании или перемещении объектов.

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

C++ Learning
👩‍💻
Главная конференция по бизнесу в Telegram

31 октября в Москве пройдёт первая конференция по Telegram от крупнейшего сервиса аналитики Telemetr. Топы Телеграм-рынка, маркетологи и представители бизнеса обсудят самые актуальные тенденции и перспективы развития платформы Telegram.

Присоединиться к мероприятию можно будет и онлайн. Тут найдёте всю информацию - https://telemetr.pro.

На конференции вас ждут:
- 20+ опытных спикеров
- 1000+ онлайн и офлайн участников
- две сцены
- нетворкинг активности
- лаунж зона
- вкусный фуршет
- яркое afterparty в PAPA Moscow

Спикерами главной сцены будут: Артемий Лебедев, руководитель Telemetr - Денис Ларионов, основатель агентства GoDigital - Сурен Альбертян, основатель Сидорин ЛАБ - Дмитрий Сидорин и многие другие!

За подробностями сюда - https://telemetr.pro

А купить билет со скидкой в 10% можно, использовав наш промокод - TMConf10

Купить билет - https://telemetr.pro
➡️ Использование std::flat_map для оптимизации производительности

std::flat_map — это структура данных, которая представляет собой ассоциативный контейнер, хранящий пары "ключ-значение" в упорядоченном виде с использованием вектора.

В отличие от std::map, std::flat_map оптимизирован для случаев, когда количество элементов невелико, так как хранение данных в последовательной области памяти снижает накладные расходы и улучшает кэширование.

• std::flat_map полезен для приложений, где требуется высокая производительность при небольших объемах данных и частых поисках.

C++ Learning 👩‍💻
➡️ Использование std::latch для синхронизации потоков

std::latch — это примитив синхронизации, который позволяет одному или нескольким потокам ожидать, пока другие потоки не завершат выполнение. В отличие от std::barrier, он не перезагружается после достижения условия синхронизации, что делает его полезным для одноразовой координации.

• std::latch полезен в ситуациях, когда необходимо, чтобы один поток ждал завершения других потоков.

C++ Learning 👩‍💻