Разбираем создание временных файлов
Сейчас научимся создавать временный файл, который сам удалится после завершения программы. Это пригодится при работе с логами, кэшем, временными данными или тестами.
Сначала подключим необходимые библиотеки из стандартной поставки:
Теперь создадим временный файл и проверим, удалось ли это:
Запишем в файл строку и переместим указатель в начало, чтобы прочитать:
Считаем содержимое из временного файла и выведем его на экран:
Результат при запуске программы:
🔥 Таким образом ты можешь безопасно создавать временные файлы — без забот об удалении и кроссплатформенных различиях.
📣 C++ Ready | #практика
Сейчас научимся создавать временный файл, который сам удалится после завершения программы. Это пригодится при работе с логами, кэшем, временными данными или тестами.
Сначала подключим необходимые библиотеки из стандартной поставки:
#include <cstdio>
#include <iostream>
Теперь создадим временный файл и проверим, удалось ли это:
std::FILE* tmp = std::tmpfile();
if (!tmp) {
std::cerr << "Не удалось создать временный файл.\n";
return 1;
}
Запишем в файл строку и переместим указатель в начало, чтобы прочитать:
std::fputs("Временные данные\n", tmp);
std::rewind(tmp);
Считаем содержимое из временного файла и выведем его на экран:
char buffer[64];
std::fgets(buffer, sizeof(buffer), tmp);
std::cout << "Прочитали: " << buffer;
Результат при запуске программы:
Прочитали: Временные данные
🔥 Таким образом ты можешь безопасно создавать временные файлы — без забот об удалении и кроссплатформенных различиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥6❤5👎1
👍11🔥9❤5
Move-семантика в C++ позволяет не копировать данные, а забирать их у временных объектов. Это ускоряет работу программы и экономит память.
Что важно знать:
• std::move() — позволяет «забрать» содержимое временного объекта.
• Move-конструктор MyClass(MyClass&&) — переносит данные при создании нового объекта.
• Оператор присваивания operator=(MyClass&&) — переносит ресурсы в уже существующий объект.
Это делает код быстрее и безопаснее — особенно при работе с динамической памятью и большими объектами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9❤7🤝6
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍6🔥4
С их помощью можно автоматически определять тип переменной, изменять элементы контейнера по ссылке, безопасно обходить коллекции без копирования, удобно распаковывать пары и кортежи
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝29🔥11❤6
🔥9👍4❤1
is_constant_evaluated для выбора поведения при компиляции!
Сейчас научимся определять, выполняется ли код на этапе компиляции или уже в рантайме — с помощью встроенной функции
Это особенно полезно, когда одна и та же функция может быть вызвана как в
Для начала подключим стандартные библиотеки:
Создадим функцию, которая возвращает разные значения в зависимости от контекста вызова:
Теперь используем эту функцию в двух вариантах:
Результат при запуске программы:
🔥
📣 C++ Ready | #практика
Сейчас научимся определять, выполняется ли код на этапе компиляции или уже в рантайме — с помощью встроенной функции
std::is_constant_evaluated
. Это особенно полезно, когда одна и та же функция может быть вызвана как в
constexpr
контексте, так и в обычном, и нам нужно выполнять разные действия в зависимости от ситуации. Для начала подключим стандартные библиотеки:
#include <iostream>
#include <type_traits>
// std::is_constant_evaluated
Создадим функцию, которая возвращает разные значения в зависимости от контекста вызова:
constexpr int compute() {
if (std::is_constant_evaluated()) {
return 42; // при компиляции
} else {
return 7; // при выполнении
}
}
Теперь используем эту функцию в двух вариантах:
int main() {
constexpr int a = compute();
// constexpr-контекст
int b = compute();
// обычный рантайм
std::cout << "a = " << a << '\n';
std::cout << "b = " << b << '\n';
}
Результат при запуске программы:
a = 42
b = 7
🔥
std::is_constant_evaluated
позволяет адаптировать поведение функций под контекст вызова — выполнять тяжёлые операции заранее и экономить ресурсы в рантайме.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5🔥5
•
std::adjacent_find
— ищет в указанном диапазоне первую пару одинаковых соседних элементов. Возвращает итератор на первый элемент такой пары или end(), если совпадений нет.•
std::generate
— заполняет диапазон значениями, генерируемыми переданной функцией. Полезен для создания тестовых данных или инициализации контейнеров случайными или последовательными значениями.🔥 — если узнал что-то новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍4❤1👎1
Лёгкая функция на C++, которая проверяет строку на совпадение с простым URL‑форматом, извлекает доменное имя и приводит его к нижнему регистру.
В этой задаче:
• Базовая валидация: убеждаемся, что в строке есть хотя бы одна точка и нет пробелов.
• Определение начала: ищем «://» — если протокол указан, начинаем сразу после него, иначе с начала строки.
• Извлечение домена: обрезаем строку по первому слэшу после начала (или до конца).
Это позволяет надёжно получить доменное имя из самых разных URL‑строк и сразу сообщить об ошибке при некорректном вводе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤6👍6