ch
Feedback
Библиотека C/C++ разработчика

Библиотека C/C++ разработчика

前往频道在 Telegram

Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter

显示更多
7 326
订阅者
-124 小时
+27
+1330
帖子存档
Для каких целей применяется ключевое слово const? Ответ: 1.Позволяет задать константность объекта 2.Позволяет задать константность указателя 3.Позволяет указать, что данный метод не модифицирует члены класса, т.е. сохраняет состояние объекта Пример 1. Не можем изменить значение объекта: const int i = 1; i = 2; // error C3892: 'i' : you cannot assign to a variable that is const Пример 2. Не можем изменить указатель на объект: int i = 1; int* const j(&i); int k = 2; *j = k; // Ok j = &k; // error C3892: 'j' : you cannot assign to a variable that is const Пример 3. Не можем изменить члены класса: class Foo { private: int i; public: void func() const { i = 1; // error C3490: 'i' cannot be modified because it is being accessed through a const object } }; Дополнение: константный метод может изменять члены класса, если они объявлены как mutable. #cpp #programming 👉 @cpp_lib

Быстрая сортировка с векторизацией и переносимостью производительности. https://opensource.googleblog.com/2022/06/Vectorized%20and%20performance%20portable%20Quicksort.html #cpp #programming 👉 @cpp_lib

Использование флагов компилятора для защиты стека в GCC и Clang. https://developers.redhat.com/articles/2022/06/02/use-compil
Использование флагов компилятора для защиты стека в GCC и Clang. https://developers.redhat.com/articles/2022/06/02/use-compiler-flags-stack-protection-gcc-and-clang #cpp #programming 👉 @cpp_lib

Всё про C++ и разработку игр / Интервью с Lead Core Developer World of Tanks Blitz https://www.youtube.com/watch?v=QQZmDWnV618 00:00 - Начало 01:30 - Про детство и школьные годы и университет 07:33 - РЕКЛАМА 09:35 - Учёба в университете и первая работа 34:40 - Что такое игровой движок 38:03 - Первая игра 38:33 - Работа в стартапе 40:55 - Жесткое выгорание 44:43 - Про работу Wargaming 53:43 - Начало про С++: история, релизы, стандарт 1:01:55 - Про сборку мусора и уровни абстракций 1:06:09 - Зачем нужен C++ если есть C 1:11:50 - Про концепции в C++ 1:18:15 - Про название языка 1:18:48 - Что можно писать на C++ и чем он хорош 1:21:20 - Про работу сборщика мусора 1:23:22 - Особенности кодирования на C++ 1:25:38 - Про паттерны и недостатки языка 1:32:22 - Популярные библиотеки и фреймворки C++ 1:37:20 - Стандартная библиотека C++ 1:39:05 - Про ORM и SQL Lite 1:40:30 - Пакетные менеджеры - vcpkg 1:43:26 - ПО для работы на плюсах: IDE, vim, Emacs И другие программы 1:59:05 - Рекомендации по литературы по C++ 2:19:40 - Про разработку игр подробнее (gamedev) - из чего состоит игра 2:27:50 - Про особенности разработки крупных игр, сетевое взаимодействие и ключевые особенности 2:38:30 - Разница игр Triple-A и казуальных игр 2:41:10 - Что нужно знать, что бы войти в геймдев: математика, алгоритмы, сети и т.д. 2:49:00 - Совет себе 15 лет назад 2:49:52 - БЛИЦ #cpp #programming 👉 @cpp_lib

LearnCpp.com - это бесплатный сайт, посвященный обучению программированию на C++. Независимо от того, есть ли у вас опыт прог
LearnCpp.com - это бесплатный сайт, посвященный обучению программированию на C++. Независимо от того, есть ли у вас опыт программирования или нет, учебники на этом сайте проведут вас через все этапы написания, компиляции и отладки программ на C++ с большим количеством примеров. #cpp #programming 👉 @cpp_lib

Что стоит помнить при использовании исключений в конструкторе объекта? Ответ: Если исключение не обработано, то c логической точки зрения разрушается объект, который еще не создан, а с технической, так как он еще не создан, то и деструктор этого объекта не будет вызван. Пример: class Base { private: HANDLE m_hFile; public: Base() { std::cout << "Hello from Base()" << std::endl; m_hFile = ::CreateFileA(...); // Вызываем код, который в ходе своего выполнения бросает исключение SomeLib.SomeFunc(...); } virtual ~Base() { std::cout << "Hello from ~Base()" << std::endl; // Здесь мы планировали закрыть хэндл ::CloseHandle(m_hFile); } }; try { Base b; } catch(const std::exception &e) { std::cout << "Exception message: " << e.what() << std::endl; } Output: Hello from Base() Exception message: Something failed Я немного модифицировал предыдущий пример, чтобы проблема была наглядней. Здесь объект m_hFile (если был открыт) утечет т.к. до CloseHandle() выполнение не дойдет. Т.е. имеем такие же проблемы как в первом примере: возможная утечка ресурсов или другие проблемы из-за нарушения логики работы класса. Здесь могут спросить: «Как бы вы поступили при подобной ситуации». Правильный ответ: «Воспользовался бы умными указателями». Простой пример умного указателя: class Base { private: class CHandle { public: ~CHandle() { ::CloseHandle(m_handle); } private: HANDLE m_handle; public: // Для полноценного smart pointer'а перегрузки одной операции // не достаточно, но для нашего примера и понимания вполне хватит void operator = (const HANDLE &handle) { m_handle = handle; } }; CHandle m_hFile; public: Base() { std::cout << "Hello from Base()" << std::endl; m_hFile = ::CreateFileA(...); // Вызываем код, который в ходе своего выполнения бросает исключение SomeLib.SomeFunc(...); } virtual ~Base() { std::cout << "Hello from ~Base()" << std::endl; } ... Теперь и без вызова деструктора Base хэндл будет закрыт, т.к. при уничтожении класса Base будет уничтожен объект m_hFile класса CHandle, в деструкторе которого и будет закрыт хэндл. Изобретать велосипед, конечно, не надо, все уже написано до нас, это пример который можно написать на бумажке при соответствующем вопросе. А так есть boost, Loki, ATL и т.п., где это уже реализовано. #cpp #programming 👉 @cpp_lib

Зачем нужен виртуальный деструктор? Ответ: Чтобы избежать возможной утечки ресурсов или другого неконтролируемого поведения объекта, в логику работы которого включен вызов деструктора. Пример: class Base { public: virtual ~Base() { std::cout << "Hello from ~Base()" << std::endl; } }; class Derived : public Base { public: virtual ~Derived() { // Здесь могла бы быть очистка ресурсов std::cout << "Hello from ~Derived()" << std::endl; } }; Base *obj = new Derived(); delete obj; Output: Hello from ~Derived() Hello from ~Base() Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base(): Output: Hello from ~Base() #cpp #programming 👉 @cpp_lib

C/C++ cheatsheet Documentation #cpp #programming 👉 @cpp_lib

C++ Reference Card #cpp #programming 👉 @cpp_lib

Знакомство с C++: Клаус Иглбергер - Паттерны проектирования - Факты и заблуждения. #cpp #programming 👉 @cpp_lib

Talking Async Ep1: Почему C++20 - самый крутой язык для сетевого программирования. https://www.youtube.com/watch?v=icgnqFM-aY4 #cpp #programming 👉 @cpp_lib

Алгоритм shuffle Переупорядочивает элементы в заданном диапазоне [first, last) таким образом, чтобы каждая возможная перестан
Алгоритм shuffle Переупорядочивает элементы в заданном диапазоне [first, last) таким образом, чтобы каждая возможная перестановка этих элементов имела равную вероятность появления. #cpp #programming 👉 @cpp_lib

Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений) https://www.youtube.com/watch?v=z6M5YCWm4Go #cpp #programming 👉 @cpp_lib

Пошаговое описание того, как я создал библиотеку C++20 для реализации удаленных вызовов функций с очень небольшим количеством кода. https://github.com/Dugy/bomba #cpp #programming 👉 @cpp_lib

🔥Сегодня! Бесплатный открытый урок по С++!🔥 ⁉️Что такое Guidelines Support Library и зачем этот инструмент С++ разработчика
🔥Сегодня! Бесплатный открытый урок по С++!🔥 ⁉️Что такое Guidelines Support Library и зачем этот инструмент С++ разработчикам? 🎯Узнайте 20 июня в 20:00 на открытом уроке онлайн-курса «C++ Developer. Professional» OTUS. Язык программирования C++ настолько сложен, что нужны дополнительные типы для пояснения семантики. На занятии обсудим, что такое Guidelines Support Library (GSL), и чем она может нам помочь в разработке повседневного кода. - Вебинар проведет Сергей Кольцов, Senior Developer С++ VisionLabs для C++ разработчиков с опытом. 📌Для участия необходимо пройти вступительный тест https://otus.pw/5PdX/

CppCast: стандартизация линейной алгебры. https://cppcast.com/linear-algebra-iso/ #cpp #programming 👉 @cpp_lib

Функция unique Unique используется для удаления дубликатов любого элемента, присутствующего последовательно в диапазоне [firs
Функция unique Unique используется для удаления дубликатов любого элемента, присутствующего последовательно в диапазоне [first, last). Он выполняет эту задачу для всех подгрупп, присутствующих в диапазоне, имеющих один и тот же элемент, присутствующий последовательно. #cpp #programming 👉 @cpp_lib

Сопрограммы в C++: что это значит, когда я объявляю свою сопрограмму как noexcept? https://devblogs.microsoft.com/oldnewthing/20210426-00/?p=105153 #cpp #programming 👉 @cpp_lib

Как в С++ обрабатывать ошибки в конструкторах без исключений? Преимущества использования исключений сомнительны, но мои прете
Как в С++ обрабатывать ошибки в конструкторах без исключений? Преимущества использования исключений сомнительны, но мои претензии к ним не в этом. Исключения — экстраординарный инструмент, которые делает код более непонятным и запутанным. А прямую локальную обработку — слишком пространной. Исключения стали для меня худшим средством обработки ошибок. Печально, что создание объектов в С++ основано на их применении. Далее #cpp #programming 👉 @cpp_lib

Библиотека C/C++ разработчика - Telegram 频道 @cpp_lib 的统计与分析