🔮 Сетевое программирование в C++
Для C++ пока, к сожалению, не написали стандартную библиотеку для работы с сетью. Но, зато есть множество хороших библиотек (Boost.Asio, Qt Network и др.). Так же стоит понимать, что многие компании пишут свои библиотеки и поэтому стоит лучше познакомиться с основами сетевого программирования, чтобы легко вникать в любую из реализаций
Что касается Boost.Asio, то для него есть перевод книги Boost.Asio C++ Network Programming
🔗 Ссылочки со спискоми библиотек
• Awesome C++
• C++ Networking libraries
• Stackoverflow (старый пост)
Для C++ пока, к сожалению, не написали стандартную библиотеку для работы с сетью. Но, зато есть множество хороших библиотек (Boost.Asio, Qt Network и др.). Так же стоит понимать, что многие компании пишут свои библиотеки и поэтому стоит лучше познакомиться с основами сетевого программирования, чтобы легко вникать в любую из реализаций
Что касается Boost.Asio, то для него есть перевод книги Boost.Asio C++ Network Programming
🔗 Ссылочки со спискоми библиотек
• Awesome C++
• C++ Networking libraries
• Stackoverflow (старый пост)
🔮 Историческая справка по lambda'м
Вышла обзорная статья по развитию lambda-выражений для разных стандартов языка
👉 Краткий обзор развития лямбда-выражений в C++11, C++14, C++17 и C++20
#junior
Вышла обзорная статья по развитию lambda-выражений для разных стандартов языка
👉 Краткий обзор развития лямбда-выражений в C++11, C++14, C++17 и C++20
#junior
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🔮 Curiously Recurring Template Pattern
Curiously Recurring Template Pattern (CRTP) или странно рекурсивный шаблон — идиома языка C++, идея которого заключается в том, что некоторый класс X наследуется от шаблона класса, использующего X как шаблонный параметр
🔥 Важно
- Это не паттерн, а техника
- Изначально это выглядело как ошибка компиляции
- Часто используется как альтернатива виртуальным методам
- Его полезно знать, чтобы не возникало ступора при прочтении такого кода
Curiously Recurring Template Pattern (CRTP) или странно рекурсивный шаблон — идиома языка C++, идея которого заключается в том, что некоторый класс X наследуется от шаблона класса, использующего X как шаблонный параметр
🔥 Важно
- Это не паттерн, а техника
- Изначально это выглядело как ошибка компиляции
- Часто используется как альтернатива виртуальным методам
- Его полезно знать, чтобы не возникало ступора при прочтении такого кода
👔 Что такое consteval?
consteval — спецификатор для функций, появился в C++20. Он обозначает, что функция будет вычислена на этапе компиляции. В этом его главное отличие от constexpr, который может быть вычеслен как на этапе компиляции, так и на этапе выполнения программы. consteval не получится вызвать во время выполнения программы, будет ошибка!
consteval — спецификатор для функций, появился в C++20. Он обозначает, что функция будет вычислена на этапе компиляции. В этом его главное отличие от constexpr, который может быть вычеслен как на этапе компиляции, так и на этапе выполнения программы. consteval не получится вызвать во время выполнения программы, будет ошибка!
🔮 Что такое designated initializers?
designated initializers — фитча появишаяся в C++20, которая позволяет явно указывать инициализацию членов структуры или класса по их имени, а не по порядку объявления. Это удобно, когда структура или класс имеет большое количество членов или когда нужно инициализировать только определённые члены
designated initializers — фитча появишаяся в C++20, которая позволяет явно указывать инициализацию членов структуры или класса по их имени, а не по порядку объявления. Это удобно, когда структура или класс имеет большое количество членов или когда нужно инициализировать только определённые члены
⚙️ Классы хранилищ (storage class)
Классы хранилищ — класс определяющий срок службы и область действия своих переменных и функций
В C++ поддерживаются следующие классы хранения: auto, static, register, extern и mutable, thread_local
Однако, ключевое слово register устарело в C++11. В C++17 он был удален и зарезервирован для использования в будущем
Классы хранилищ — класс определяющий срок службы и область действия своих переменных и функций
В C++ поддерживаются следующие классы хранения: auto, static, register, extern и mutable, thread_local
Однако, ключевое слово register устарело в C++11. В C++17 он был удален и зарезервирован для использования в будущем
🔮 Ключевое слово volatile
Ключевое слово volatile сообщает компилятору, что переменная может измениться, и компилятор об этом не узнает. Переменные, объявленные как volatile, не будут кэшироваться компилятором и, следовательно, всегда будут считываться из памяти
Одно из назначений этого ключевого слова — это работать с внешними устройствами, взаимодействие с которыми идёт через память. Проще говоря устройство устройство мапится напрямую в память процесса
Ключевое слово volatile сообщает компилятору, что переменная может измениться, и компилятор об этом не узнает. Переменные, объявленные как volatile, не будут кэшироваться компилятором и, следовательно, всегда будут считываться из памяти
Одно из назначений этого ключевого слова — это работать с внешними устройствами, взаимодействие с которыми идёт через память. Проще говоря устройство устройство мапится напрямую в память процесса
🔮 Ключевые слова final и override
Ключевое слово override заставляет компилятор проверить, что метод virtual и находится в базовом классе. Если не найдёт базовый класс или метод будет иметь другую сигнатуру, то компилятор выдаст ошибку времени компиляции
final — если реализация (дальнейшая) не подразумевается дальнейшего переиспользования (наследования), то final прервёт наследование
Ключевое слово override заставляет компилятор проверить, что метод virtual и находится в базовом классе. Если не найдёт базовый класс или метод будет иметь другую сигнатуру, то компилятор выдаст ошибку времени компиляции
final — если реализация (дальнейшая) не подразумевается дальнейшего переиспользования (наследования), то final прервёт наследование
🔮 Что такое enum class?
• В C++11 на смену стандартному перечислению (enum), пришёл enum class
• Работает также как и просто enum. В качестве предка можно использовать любой целочисленный тип (например int)
• Самое главное отличие от enum, то что enum class и правда является namespace'ом и определения из него не видны снаружи без использования имени самого enum class
• В C++11 на смену стандартному перечислению (enum), пришёл enum class
• Работает также как и просто enum. В качестве предка можно использовать любой целочисленный тип (например int)
• Самое главное отличие от enum, то что enum class и правда является namespace'ом и определения из него не видны снаружи без использования имени самого enum class
🧨 Отличная подборка книг по языкам программирования и технологиям
В книгах всё разбито по темам описывающим наиболее частые вопросы задаваемые при использование языка
👉Ссылка
В книгах всё разбито по темам описывающим наиболее частые вопросы задаваемые при использование языка
👉Ссылка
🔍 Что такое пользовательские суффиксы в C++?
Пользовательские суффиксы — это инструмент в C++, который позволяет определять собственные суффиксы для литералов. В основном используется для улучшения читаемости кода
📝 Особенности
- Вызов данной функций анализируется ещё на этапе анализа исходного кода
- В стандартных библиотеках суффикс может быть любым. Для пользователей только со знаком подчёркивания
Пользовательские суффиксы — это инструмент в C++, который позволяет определять собственные суффиксы для литералов. В основном используется для улучшения читаемости кода
📝 Особенности
- Вызов данной функций анализируется ещё на этапе анализа исходного кода
- В стандартных библиотеках суффикс может быть любым. Для пользователей только со знаком подчёркивания
💡 null pointer
В стандарте до C++11 нулевой указатель было просто определением (define). Главная проблема такого подхода в том что это просто define над int, проще говоря просто int
nullptr — появился в C++11. Это не настоящий указатель, это класс. Его нельзя привести к int. Можно присвоить только указателю
В стандарте до C++11 нулевой указатель было просто определением (define). Главная проблема такого подхода в том что это просто define над int, проще говоря просто int
nullptr — появился в C++11. Это не настоящий указатель, это класс. Его нельзя привести к int. Можно присвоить только указателю
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Forwarded from Библиотека C/C++ разработчика | cpp, boost, qt
🧨 Чем отличаются ссылки от указателей в С++
❗Указатели
• Указатель — это переменная, которая содержит адрес ячейки памяти
• Указатели могут быть нулевыми (nullptr), что означает, что они не указывают ни на какую конкретную область памяти
• Указатели могут быть изменены для указания на другую область памяти
• Указатели могут указывать на массивы элементов
• Указатели могут использоваться для динамического выделения памяти с помощью оператора new и освобождения памяти с помощью оператора delete
❗Ссылки
• Ссылка — это альтернативное имя для существующей переменной
• Ссылка обязательно должна быть инициализирована при объявлении и не может быть изменена, чтобы указывать на другой объект
• Ссылки не могут быть нулевыми, они всегда указывают на существующий объект
• Ссылки не могут указывать на массивы элементов
• Ссылки обычно используются в качестве аргументов функций для передачи данных по ссылке, что позволяет изменять исходные значения переменных
❗Указатели
• Указатель — это переменная, которая содержит адрес ячейки памяти
• Указатели могут быть нулевыми (nullptr), что означает, что они не указывают ни на какую конкретную область памяти
• Указатели могут быть изменены для указания на другую область памяти
• Указатели могут указывать на массивы элементов
• Указатели могут использоваться для динамического выделения памяти с помощью оператора new и освобождения памяти с помощью оператора delete
❗Ссылки
• Ссылка — это альтернативное имя для существующей переменной
• Ссылка обязательно должна быть инициализирована при объявлении и не может быть изменена, чтобы указывать на другой объект
• Ссылки не могут быть нулевыми, они всегда указывают на существующий объект
• Ссылки не могут указывать на массивы элементов
• Ссылки обычно используются в качестве аргументов функций для передачи данных по ссылке, что позволяет изменять исходные значения переменных
🔮 std::bitset
Шаблонный класс std::bitset предназначен для управления наборами битов, обеспечивая удобные методы для их установки, сброса и получения. Основная польза от него в том, что в нём можно компактно хранить булевы значения, не тратя на это целый байт, как при использовании обычного bool
Шаблонный класс std::bitset предназначен для управления наборами битов, обеспечивая удобные методы для их установки, сброса и получения. Основная польза от него в том, что в нём можно компактно хранить булевы значения, не тратя на это целый байт, как при использовании обычного bool