Exception safety guarantee
Exception safety guarantee (гарантия безопасности исключений) — это концепция, которая определяет, каким образом объекты и ресурсы управляются во время генерации и обработки исключений, чтобы предотвратить утечки памяти и другие нежелательные побочные эффекты. Exception safety guarantee определяет, как хорошо библиотечные или пользовательские функции справляются с исключениями и обеспечивают корректное состояние программы в случае возникновения исключения.
#для_продвинутых
Exception safety guarantee (гарантия безопасности исключений) — это концепция, которая определяет, каким образом объекты и ресурсы управляются во время генерации и обработки исключений, чтобы предотвратить утечки памяти и другие нежелательные побочные эффекты. Exception safety guarantee определяет, как хорошо библиотечные или пользовательские функции справляются с исключениями и обеспечивают корректное состояние программы в случае возникновения исключения.
#для_продвинутых
Функторы
Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().
Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.
#для_начинающих
Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().
Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.
#для_начинающих
std::launch::async
#для_продвинутых
std::launch::async
— это одна из опций, доступных при создании объекта std::launch::async
| std::launch::deferred
в контексте создания потоков с использованием стандартной библиотеки C++ (поддерживается начиная с C++11). Эта опция определяет, каким образом будет запущена функция в новом потоке, когда вы используете std::async
.std::launch::async
указывает на то, что функция должна быть немедленно запущена в отдельном потоке (асинхронно). Это означает, что она выполнится в фоновом режиме и может начать выполнение даже до того, как объект std::future
, возвращаемый std::async
, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.#для_продвинутых
Бьёрн Страуструп: что в C++ надо было сделать по-другому, зачем его учить и совет начинающим программистам
Смотреть статью
Смотреть статью
Tproger
Бьёрн Страуструп: что в C++ надо было сделать по-другому, зачем его учить и совет начинающим программистам
Создатель C++ делится, что бы он поменял в C++, если бы у него была машина времени, зачем учить C++ в 2020 году и что нужно знать начинающему программисту.
Как написать чит для кс го за 30 секунд на c++
В этом видео вы узнаете как написать чит для кс го за 30 секунд на языке программирования c++ и это очень хороший и обучающий туториал по написанию читов для кс го и не только
Смотреть видео
В этом видео вы узнаете как написать чит для кс го за 30 секунд на языке программирования c++ и это очень хороший и обучающий туториал по написанию читов для кс го и не только
Смотреть видео
В чем проблема со следующим кодом?
Поведение не определено, потому что деструктор A не является виртуальным.
class A
{
public:
A() {}
~A(){}
};
class B: public A
{
public:
B():A(){}
~B(){}
};
int main(void)
{
A* a = new B();
delete a;
}
Происхождение и эволюция аллокатора памяти в С
Подсистема памяти - это часть т.н. C Runtime или CRT, отвечающая за работу с памятью. Библиотека CRT служит посредником между прикладной программой и ядром операционной системы. Соответственно, её внешним интерфейсом является “стандартная библиотека С”, внутренний интерфейс специфичен для конкретной ОС.
Смотреть статью
Подсистема памяти - это часть т.н. C Runtime или CRT, отвечающая за работу с памятью. Библиотека CRT служит посредником между прикладной программой и ядром операционной системы. Соответственно, её внешним интерфейсом является “стандартная библиотека С”, внутренний интерфейс специфичен для конкретной ОС.
Смотреть статью
Что такое std::stack?
Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
std::stack
— это класс, представляющий собой стек, структуру данных, которая работает по принципу LIFO (last-in first-out или "последний вошел — первым вышел"). Это означает, что первым всегда извлекается последний добавленный элемент.Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
std::decay
#для_продвинутых
std::decay
— это шаблонная метафункция в C++, которая применяется для преобразования типа к его «распадающемуся» типу. Это означает, что она удаляет все модификаторы const
, volatile
, ссылки и cv-квалификаторы, а также преобразует массивы в указатели на их элементы.#для_продвинутых
std::launder
Функция
Функция
Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых
Функция
std::launder
была добавлена в C++17 для решения проблем, связанных с алиасингом и строгим алиасингом.Функция
std::launder
используется для того, чтобы преобразовать указатель одного типа в указатель другого типа, не нарушая при этом правила строгого алиасинга.Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых
Функция std::getline
Функция std::getline в C++ используется для чтения строк из потока ввода, обычно с клавиатуры. Она является частью стандартной библиотеки C++ (iostream) и позволяет считывать строки, содержащие пробелы, в отличие от оператора извлечения (>>), который останавливается на первом пробеле.
#для_начинающих
Функция std::getline в C++ используется для чтения строк из потока ввода, обычно с клавиатуры. Она является частью стандартной библиотеки C++ (iostream) и позволяет считывать строки, содержащие пробелы, в отличие от оператора извлечения (>>), который останавливается на первом пробеле.
#для_начинающих
Функция std::inplace_merge
Функция
Функция объединяет два исходных диапазона в один отсортированный диапазон, используя исходный диапазон в качестве выходного. Элементы из первого диапазона предшествуют элементам из второго диапазона при одинаковых значениях (стабильная сортировка).
#для_продвинутых
Функция
std::inplace_merge
в библиотеке C++ <algorithm>
предназначена для объединения двух отсортированных диапазонов элементов в один отсортированный диапазон, используя алгоритм слияния "на месте".Функция объединяет два исходных диапазона в один отсортированный диапазон, используя исходный диапазон в качестве выходного. Элементы из первого диапазона предшествуют элементам из второго диапазона при одинаковых значениях (стабильная сортировка).
#для_продвинутых
Что такое TDD?
TDD (Test-Driven Development) — это методология разработки программного обеспечения, которая основана на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам.
TDD означает, что программист сначала пишет модульный тест, который проверяет ожидаемое поведение некоторой части кода. Затем программист пишет код, который заставляет тест пройти. После этого программист может провести рефакторинг кода, чтобы улучшить его читаемость, производительность или другие свойства.
TDD (Test-Driven Development) — это методология разработки программного обеспечения, которая основана на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам.
TDD означает, что программист сначала пишет модульный тест, который проверяет ожидаемое поведение некоторой части кода. Затем программист пишет код, который заставляет тест пройти. После этого программист может провести рефакторинг кода, чтобы улучшить его читаемость, производительность или другие свойства.
Спецификаторы доступа
В C++ используются три спецификатора доступа:
По умолчанию все члены класса объявляются с спецификатором
Спецификаторы доступа используются для обеспечения инкапсуляции, то есть отделения внутренней реализации класса от его интерфейса. Инкапсуляция позволяет скрыть детали реализации от пользователя класса, что делает код более понятным и надежным.
#для_начинающих
В C++ используются три спецификатора доступа:
public
, private
и protected
. Они определяют, кто может получить доступ к членам класса или структуры.public
— члены с таким спецификатором доступны из любого места программы, включая другие классы и структуры.private
— члены с таким спецификатором доступны только из самого класса, в котором они объявлены.protected
— члены с таким спецификатором доступны из самого класса, в котором они объявлены, а также из производных классов.По умолчанию все члены класса объявляются с спецификатором
private
, а члены структуры — с public
.Спецификаторы доступа используются для обеспечения инкапсуляции, то есть отделения внутренней реализации класса от его интерфейса. Инкапсуляция позволяет скрыть детали реализации от пользователя класса, что делает код более понятным и надежным.
#для_начинающих
Побитовое копирование
Побитовое копирование — это процесс создания копии объекта, при котором все биты исходного объекта копируются в целевой объект. Это означает, что все члены данных исходного объекта копируются в целевой объект, включая указатели, массивы и структуры.
В C++ побитовое копирование выполняется конструктором копирования. Если конструктор копирования не определен для класса, компилятор генерирует его неявно. Генерируемый компилятором конструктор копирования выполняет побитовое копирование всех членов данных класса.
#для_продвинутых
Побитовое копирование — это процесс создания копии объекта, при котором все биты исходного объекта копируются в целевой объект. Это означает, что все члены данных исходного объекта копируются в целевой объект, включая указатели, массивы и структуры.
В C++ побитовое копирование выполняется конструктором копирования. Если конструктор копирования не определен для класса, компилятор генерирует его неявно. Генерируемый компилятором конструктор копирования выполняет побитовое копирование всех членов данных класса.
#для_продвинутых
std::byte
— Для доступа к памяти, занимаемой другими объектами.
— Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
— Для реализации собственных типов данных, которые должны хранить байты.
#для_продвинутых
std::byte
— это тип данных, введенный в стандарт C++17. Он представляет собой один байт, то есть 8 бит. std::byte
не является ни типом символа, ни типом числа. Он предназначен для представления байтов в памяти, независимо от того, используются они для хранения символов, чисел или чего-либо еще.std::byte
может использоваться в следующих случаях:— Для доступа к памяти, занимаемой другими объектами.
— Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
— Для реализации собственных типов данных, которые должны хранить байты.
#для_продвинутых