⚙️ std::visit
В C++17 введена функция
C++ Learning 👩💻
В C++17 введена функция
std::visit из заголовка <variant>, которая позволяет применять вызываемый объект (функтор, лямбда или функциональный объект) к текущему значению std::variant. Это обеспечивает безопасную и удобную работу с вариантами, заменяя необходимость в явных проверках типа и приведениях.C++ Learning 👩💻
➡️ Boost.JSON — библиотека для работы с JSON в C++
Boost.JSON, предназначена для эффективной работы с JSON-данными в C++. Она обеспечивает высокую производительность и простоту интеграции в существующие проекты.
🔗 Ссылочка на доку
C++ Learning 👩💻
Boost.JSON, предназначена для эффективной работы с JSON-данными в C++. Она обеспечивает высокую производительность и простоту интеграции в существующие проекты.
• Высокая производительность: Оптимизированный парсер и сериализатор для быстрого преобразования JSON-данных.• Совместимость: Поддержка стандартных контейнеров C++ и интеграция с другими библиотеками Boost.• Гибкость: Возможность работы с произвольными JSON-структурами и типами данных.• Безопасность: Обработка ошибок и защита от переполнения буфера при работе с недоверенными данными.🔗 Ссылочка на доку
C++ Learning 👩💻
➡️ RaftLib — современная библиотека для параллельной обработки данных в C++
RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.
🔗 Ссылочка на доку
C++ Learning 👩💻
RaftLib — это библиотека с открытым исходным кодом, упрощающая разработку высокопроизводительных параллельных приложений на C++. Она позволяет создавать масштабируемые системы обработки данных, используя концепцию потоков и конвейеров.
• Интуитивный интерфейс: Напоминает стандартные потоки C++, облегчая освоение.• Автоматическая параллелизация: Управляет потоками и распределением задач для оптимальной производительности.• Гибкость и масштабируемость: Эффективна как на локальных системах, так и в распределённых средах.🔗 Ссылочка на доку
C++ Learning 👩💻
⚙️ std::forward
Функция
C++ Learning 👩💻
Функция
std::forward из заголовка <utility> используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.C++ Learning 👩💻
➡️ Crow — легковесный фреймворк для веб-приложений на C++
Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.
🔗 Ссылочка на доку
C++ Learning 👩💻
Crow — это минималистичный фреймворк для разработки веб-серверов на C++. Поддерживает маршрутизацию, работу с JSON и асинхронный ввод-вывод, что делает его идеальным для создания быстрых и лёгких API.
• Простая маршрутизация для создания RESTful API.• Встроенная поддержка JSON через nlohmann/json.• Асинхронная обработка запросов для высокой производительности.🔗 Ссылочка на доку
C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое перемещение (move semantics) в C++11, как оно работает, и зачем нужен конструктор перемещения?
Ответ ⬇️
Перемещение — это оптимизация, которая позволяет передавать ресурсы (например, память или файлы) из одного объекта в другой без копирования, с помощью конструктора перемещения или оператора перемещения. Это достигается использованием std::move, который превращает объект в rvalue-ссылку, указывающую на временный объект. Конструктор перемещения предотвращает дорогостоящие копирования, делая код более производительным.
Пример использования ⚙️
Если вдруг не поняли, можешь почитать подробное объяснение здесь.
C++ Learning 👩💻
Что такое перемещение (move semantics) в C++11, как оно работает, и зачем нужен конструктор перемещения?
Ответ ⬇️
Пример использования ⚙️
#include <iostream>
#include <vector>
#include <utility> // Для std::move
class MyVector {
private:
int* data;
size_t size;
public:
// Конструктор
MyVector(size_t n) : size(n), data(new int[n]) {
std::cout << "Конструктор\n";
}
// Конструктор перемещения
MyVector(MyVector&& other) noexcept : size(other.size), data(other.data) {
other.data = nullptr; // Передаем ресурсы и обнуляем указатель у источника
other.size = 0;
std::cout << "Конструктор перемещения\n";
}
// Деструктор
~MyVector() {
delete[] data;
std::cout << "Деструктор\n";
}
};
int main() {
MyVector vec1(10); // Создаем объект
MyVector vec2 = std::move(vec1); // Используем конструктор перемещения
// vec1 больше не владеет ресурсами
return 0;
}
// Результат выполнения:
// Конструктор
// Конструктор перемещения
// Деструктор (vec1, ресурсы уже перенесены)
// Деструктор (vec2)
Если вдруг не поняли, можешь почитать подробное объяснение здесь.
C++ Learning 👩💻
⚙️ std::reverse
В C++ функция
C++ Learning 👩💻
В C++ функция
std::reverse из заголовка <algorithm> позволяет изменить порядок элементов в контейнере на обратный. Это полезно для работы с массивами, векторами и другими последовательностями.C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое perfect forwarding в C++, как оно работает и зачем оно нужно?
Ответ ⬇️
Perfect forwarding — это техника передачи аргументов в функции или конструкторы так, чтобы сохранить их исходные квалификаторы (например, lvalue, rvalue). Она достигается с помощью универсальных ссылок (T&&) и функции std::forward. Perfect forwarding используется для передачи аргументов в шаблонных функциях без лишних копирований.
Пример использования ⚙️
C++ Learning 👩💻
Что такое perfect forwarding в C++, как оно работает и зачем оно нужно?
Ответ ⬇️
Пример использования ⚙️
#include <iostream>
#include <utility>
void process(int& x) {
std::cout << "Lvalue: " << x << "\n";
}
void process(int&& x) {
std::cout << "Rvalue: " << x << "\n";
}
template <typename T>
void forwarder(T&& arg) {
process(std::forward<T>(arg));
}
int main() {
int a = 42;
forwarder(a); // Передаем lvalue
forwarder(100); // Передаем rvalue
return 0;
}
C++ Learning 👩💻