Библиотека C/C++ разработчика
6.81K subscribers
655 photos
690 videos
8 files
940 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
C++23: четыре новых ассоциативных контейнера

В C++23 появились четыре новых ассоциативных контейнера: std::flat_map, std::flat_multimap, std::flat_set и std::flat_multiset, которые являются полноценной заменой упорядоченных ассоциативных контейнеров std::map, std::multimap, std::set и std::multiset. Они были добавлены в C++23 по двум причинам: расход памяти и производительность.

https://www.modernescpp.com/index.php/c23-four-new-associative-containers/

#cpp #programming

👉 @cpp_lib
👍7
Введение в компиляцию C++ в командной строке

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

При использовании Unreal Engine 4 или другого высокоуровневого фреймворка компиляция кода на языке C++ в значительной степени скрыта от глаз. Это очень удобно, когда все работает, но становится препятствием, когда нужно что-то изменить. Единственный способ не стать рабом своих творений - понять, как они работают.

https://unrealistic.dev/posts/introduction-to-c-compilation-on-the-command-line

#cpp #programming

👉 @cpp_lib
4👍1
Моя борьба против знакового/беззнакового сравнения: самые распространенные нарушения

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

Мы также увидели, что C++20 предлагает простой и безопасный способ сравнения чисел в любое время, и он всегда вернет вам ожидаемый результат.

https://www.sandordargo.com/blog/2023/10/18/signed-unsigned-comparison-the-most-usual-violations

#cpp #programming

👉 @cpp_lib
👍3
Fiber в C++: Понимание основ

Fiber, менее известная концепция по сравнению с coroutine, является довольно мощным дополнением к кооперативной многозадачности. Как графический программист, работающий в игровой индустрии, я очень ценю гибкость, которую дает fiber. На самом деле, мне кажется, что эта технология немного недооценена из-за отсутствия достаточного количества публичных материалов, рассказывающих о волокнах.

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

https://agraphicsguynotes.com/posts/fiber_in_cpp_understanding_the_basics/

#cpp #programming

👉 @cpp_lib
👍8
Как рисуется карта в Фараоне

В свободное время я восстанавливаю старенькую, но довольно известную игру Pharaoh. Это ситибилдер, выпущенный в прошлом веке и разработанный Impressions Games. Технология рендеринга в этой игре была значительным достижением для своего времени и способствовала созданию впечатляющей атмосферы Древнего Египта, которая погружает игрока в проработанное окружение, удивляет вниманием к мелким деталям и передает богатство и разнообразие древнеегипетских пейзажей. В этой статье я опишу алгоритм отрисовки города, зданий, объектов, анимации и формат карты оригинальной игры.

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

#cpp #programming

👉 @cpp_lib
👍2
Перегрузка операторов в C++. Основы

#include <iostream>

class Counter
{
public:
Counter(int val)
{
value =val;
}
void print()
{
std::cout << "Value: " << value << std::endl;
}
Counter operator + (const Counter& counter) const
{
return Counter{value + counter.value};
}
private:
int value;
};

int main()
{
Counter c1{20};
Counter c2{10};
Counter c3 = c1 + c2;
c3.print(); // Value: 30
}

https://metanit.com/cpp/tutorial/5.14.php

#cpp #programming

👉 @cpp_lib
👍5🥱1🍓1
Решаем задачу асинхронного ввода-вывода с библиотекой Asio

Меня зовут Илья Казаков, я C++ разработчик в команде систем хранения данных компании YADRO, одна из моих задач — реализация эффективных IO-bound программ под Linux.

На одном из проектов мы с командой использовали Asio — библиотеку C++ для сетевого и низкоуровневого программирования ввода-вывода. Она предлагает свою асинхронную модель. Технология отлично справилась с нашей задачей, и я хочу поделиться с вами опытом ее использования. Под катом расскажу, какие решения я рассматривал для асинхронного ввода-вывода и почему остановился на Asio.

https://habr.com/ru/companies/yadro/articles/774130/

#cpp #programming

👉 @cpp_lib
👍4
Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK

GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов, который интересно проверять с помощью анализатора PVS-Studio. Тем более, что предыдущую проверку мы делали около 3 лет назад, а значит, наверняка найдём в нём новые ошибки.


Очень не хотелось частично повторять введение из прошлой статьи "Выявляем опечатки в проекте GTK 4 с помощью PVS-Studio", но подозреваю, что далеко не все читатели знакомы с GTK. Поэтому вкратце: библиотека позволяет кроссплатформенно реализовывать графический пользовательский интерфейс. Полностью бесплатна и имеет открытый исходный код, лицензированный под GNU GPL, что позволяет использовать её в любых проектах (даже коммерческих).

https://habr.com/ru/companies/pvs-studio/articles/770050/

#cpp #programming

👉 @cpp_lib
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать 2D игру на C++ и чистом STL для терминала в Linux

Привет, Хабр, я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.

https://habr.com/ru/post/708486/

#cpp #programming

👉 @cpp_lib
🔥5👍3
Исчерпывающее руководство по работе с файлами в C++

В этой заметке я расскажу вам, как можно использовать работу с файлами в C++ и сохранять в них не только текстовые, но и бинарные данные типа Class или Struct.

https://dev.to/tbhaxor/a-comprehensive-guide-to-file-handling-in-c-2p1b

#cpp #programming

👉 @cpp_lib
👍6
Как использовать std::span из C++20

В этой статье рассмотрен std::span, который является более универсальным, чем string_view, и может помочь в работе с произвольными смежными коллекциями.

https://www.cppstories.com/2023/span-cpp20/

#cpp #programming

👉 @cpp_lib
👍1
Последние обновления для разработки CMake в Visual Studio

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

https://devblogs.microsoft.com/visualstudio/latest-updates-for-cmake-development-in-visual-studio/

#cpp #programming

👉 @cpp_lib
👍5
Ranges Library в C++20: больше возможностей для проектирования

Ranges Library в C++20 по соображениям производительности было сделано несколько уникальных конструктивных решений. Эти решения имеют свои последствия: проблемы с кэшем и проблемы с постоянством.

https://www.modernescpp.com/index.php/the-ranges-library-in-c20-more-design-choices/

#cpp #programming

👉 @cpp_lib
👍3
Введение в корутины (C++20): О Promise Type, Awaitable и Coroutine Handle

Сегодня я начну цикл статей о планировщике задач. Отправной точкой минисериала является простейший планировщик от Dian-Lun Lin, который становится все более сложным.

https://www.modernescpp.com/index.php/a-concise-introduction-to-coroutines-by-dian-lun-li/

#cpp #programming

👉 @cpp_lib
👍3👏1
Extern templates to reduce binary size

Статья об использовании extern template для сокращения размеров бинарных файлов.

template <typename T>
class Wrapper {
public:
// ...
private:
T wrapped;
};

// No object code will be generated for Wrapper<int> in this translation unit
extern template class Wrapper<int>;


https://www.sandordargo.com/blog/2023/11/08/extern-templates

#cpp #programming

👉 @cpp_lib
🔥3👍2
Как читать язык ассемблера

Зачем кому-то нужно изучать язык ассемблера? Во-первых, чтение языка ассемблера - это способ узнать, что именно делает ваша программа. Почему именно эта программа на Си++ занимает 1 Мб (скажем), а не 100 Кб? Можно ли выжать еще немного производительности из той функции, которая постоянно вызывается?

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

https://wolchok.org/posts/how-to-read-assembly-language/

#cpp #programming

👉 @cpp_lib
🔥5👍3
Отчет о поездке: Осенняя встреча по стандартам ISO C++ (Кона, HI, США)

На днях комитет ISO C++ завершил свое второе собрание C++26, состоявшееся в Коне, штат Гавайи, США.

Наши организаторы, Standard C++ Foundation и WorldQuant, организовали высококачественные условия для нашей шестидневной встречи с понедельника по субботу. У нас было более 170 участников, около двух третей лично, а остальные удаленно через Zoom, формально представляющие 21 страну. Кроме того, на каждой встрече у нас регулярно появляются новые участники, которые никогда раньше не присутствовали, и на этот раз было более дюжины новых посетителей, в основном лично; всем им еще раз добро пожаловать!

https://herbsutter.com/2023/11/11/trip-report-autumn-iso-c-standards-meeting-kona-hi-usa/

#cpp #programming

👉 @cpp_lib
👍3