🤔 Как это работает? — Передача аргументов в C++
В C++ аргументы функции можно передавать по значению, по ссылке и по константной ссылке. Эти подходы влияют на производительность и безопасность. Давайте разберём, как это работает.
➡️ Как это работает:
• Передача по значению: создаёт копию объекта, что может быть дорого для больших объектов.
• Передача по ссылке: передаёт ссылку на объект, избегая копирования.
• Передача по константной ссылке: добавляет защиту от изменения объекта внутри функции.
Развернутый аналог:
void modifyValue(const int &value) {
// value нельзя изменить
}
👩💻
@quizcpp
В C++ аргументы функции можно передавать по значению, по ссылке и по константной ссылке. Эти подходы влияют на производительность и безопасность. Давайте разберём, как это работает.
➡️ Как это работает:
• Передача по значению: создаёт копию объекта, что может быть дорого для больших объектов.
• Передача по ссылке: передаёт ссылку на объект, избегая копирования.
• Передача по константной ссылке: добавляет защиту от изменения объекта внутри функции.
Развернутый аналог:
void modifyValue(const int &value) {
// value нельзя изменить
}
👩💻
@quizcpp
🔥1
⚙️ std::ofstream
std::ofstream из заголовка используется для записи данных в файл. Это удобный инструмент для работы с файлами, позволяющий записывать текстовую или бинарную информацию.
👩💻
@quizcpp
std::ofstream из заголовка используется для записи данных в файл. Это удобный инструмент для работы с файлами, позволяющий записывать текстовую или бинарную информацию.
👩💻
@quizcpp
⚙️ std::byte
std::byte из заголовка предоставляет тип для работы с данными на уровне байтов. Это полезно для низкоуровневой работы с памятью и сетевыми протоколами.
👩💻
@quizcpp
std::byte из заголовка предоставляет тип для работы с данными на уровне байтов. Это полезно для низкоуровневой работы с памятью и сетевыми протоколами.
👩💻
@quizcpp
❓ Вопрос на собеседовании
Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?
Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.
Пример использования ⚙️
#include
#include
#include
std::atomic counter(0);
void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout
@quizcpp
Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?
Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.
Пример использования ⚙️
#include
#include
#include
std::atomic counter(0);
void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout
@quizcpp
❓ Вопрос на собеседовании
Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?
Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.
Пример использования ⚙️
#include
#include
#include
std::atomic counter(0);
void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout
@quizcpp
Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?
Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.
Пример использования ⚙️
#include
#include
#include
std::atomic counter(0);
void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout
@quizcpp
🚫 Антипаттерн недели: Использование явных циклов для поиска в контейнерах
Явные циклы для поиска элемента в контейнерах делают код громоздким и увеличивают вероятность ошибок. В C++ стандартная библиотека предоставляет функции, такие как std::find, для упрощения и оптимизации этих операций.
✔️ Используйте алгоритмы из , такие как std::find, чтобы упростить код и улучшить читаемость.
👩💻
@quizcpp
Явные циклы для поиска элемента в контейнерах делают код громоздким и увеличивают вероятность ошибок. В C++ стандартная библиотека предоставляет функции, такие как std::find, для упрощения и оптимизации этих операций.
✔️ Используйте алгоритмы из , такие как std::find, чтобы упростить код и улучшить читаемость.
👩💻
@quizcpp
❓ Вопрос на собеседовании
Что такое std::allocator в C++, и как его можно использовать для управления памятью?
Ответ ⬇️
std::allocator — это стандартный шаблонный класс, предоставляющий низкоуровневые инструменты для управления памятью в STL-контейнерах. Он позволяет настраивать аллокацию памяти, предоставляя методы для выделения, освобождения и построения объектов.
Пример использования ⚙️
#include
#include
int main() {
std::allocator allocator;
// Выделяем память для 3 целых чисел
int* arr = allocator.allocate(3);
// Конструируем элементы
allocator.construct(arr, 10);
allocator.construct(arr + 1, 20);
allocator.construct(arr + 2, 30);
// Выводим значения
for (int i = 0; i < 3; ++i) {
std::cout
@quizcpp
Что такое std::allocator в C++, и как его можно использовать для управления памятью?
Ответ ⬇️
std::allocator — это стандартный шаблонный класс, предоставляющий низкоуровневые инструменты для управления памятью в STL-контейнерах. Он позволяет настраивать аллокацию памяти, предоставляя методы для выделения, освобождения и построения объектов.
Пример использования ⚙️
#include
#include
int main() {
std::allocator allocator;
// Выделяем память для 3 целых чисел
int* arr = allocator.allocate(3);
// Конструируем элементы
allocator.construct(arr, 10);
allocator.construct(arr + 1, 20);
allocator.construct(arr + 2, 30);
// Выводим значения
for (int i = 0; i < 3; ++i) {
std::cout
@quizcpp
⚙️ std::atomic_flag
std::atomic_flag из заголовка представляет собой простой атомарный флаг, который можно использовать для реализации низкоуровневой синхронизации.
👩💻
@quizcpp
std::atomic_flag из заголовка представляет собой простой атомарный флаг, который можно использовать для реализации низкоуровневой синхронизации.
👩💻
@quizcpp
❓ Вопрос на собеседовании
Что такое constexpr в C++ и в чём его отличие от const?
Ответ ⬇️
constexpr — это спецификатор в C++, который указывает, что значение выражения или функции может быть вычислено на этапе компиляции, если это возможно. В отличие от const, который просто запрещает изменение значения, constexpr гарантирует, что вычисления происходят на этапе компиляции (при условии, что все входные данные известны на этом этапе).
constexpr используется для оптимизации кода, особенно в вычислениях, которые можно заранее предсказать.
Пример использования ⚙️
#include
constexpr int square(int x) {
return x * x; // Вычисляется на этапе компиляции
}
int main() {
constexpr int result = square(5); // Результат вычислен на этапе компиляции
std::cout
@quizcpp
Что такое constexpr в C++ и в чём его отличие от const?
Ответ ⬇️
constexpr — это спецификатор в C++, который указывает, что значение выражения или функции может быть вычислено на этапе компиляции, если это возможно. В отличие от const, который просто запрещает изменение значения, constexpr гарантирует, что вычисления происходят на этапе компиляции (при условии, что все входные данные известны на этом этапе).
constexpr используется для оптимизации кода, особенно в вычислениях, которые можно заранее предсказать.
Пример использования ⚙️
#include
constexpr int square(int x) {
return x * x; // Вычисляется на этапе компиляции
}
int main() {
constexpr int result = square(5); // Результат вычислен на этапе компиляции
std::cout
@quizcpp
⚙️ std::chrono::steady_clock
std::chrono::steady_clock из заголовка представляет часы с монотонным ходом, которые никогда не корректируются. Это полезно для измерения времени выполнения или задержек.
👩💻
@quizcpp
std::chrono::steady_clock из заголовка представляет часы с монотонным ходом, которые никогда не корректируются. Это полезно для измерения времени выполнения или задержек.
👩💻
@quizcpp
🔥1
⚙️ std::barrier
std::barrier из заголовка (доступно с C++20) синхронизирует выполнение потоков, ожидая, пока все участники не достигнут определённой точки (барьера). Это полезно для координации действий в многопоточных приложениях.
👩💻
@quizcpp
std::barrier из заголовка (доступно с C++20) синхронизирует выполнение потоков, ожидая, пока все участники не достигнут определённой точки (барьера). Это полезно для координации действий в многопоточных приложениях.
👩💻
@quizcpp
Пару недель назад мы обсуждали с коллегами, что digital-рынок стал похож на перегретый стартап:
новые инструменты, новые фреймворки, новые ИИ-решения — а времени разбираться во всём этом меньше, чем когда-либо.
При этом базовые задачи у всех одинаковые: держать процессы под контролем, следить за качеством, закрывать акты день в день и не терять фокус.
В итоге несколько авторов digital-каналов решили объединиться и собрать всё полезное в одну папку — «Документы для тех, кто в digital»
🔴 Там 30 файлов, которые помогают выстроить управление, аналитику и внутренние процессы:
– Система мотивации сотрудников в диджитал на 2026 год,
– 4 шаблона основых документов любого ИТ проекта,
– Топ-6 промптов для создания контента,
– Шаблоны отчётов, которые помогают удерживать клиента,
– Чек-лист по GEO оптимизации сайта и контента.
Сохранив единожды папку «Документы для тех, кто в digital», вы сможете спокойно пройтись по всем каналам и скачать множество авторских документов, которые точно пригодятся в работе.
📂 Ссылка на папку: https://t.me/addlist/yXbxnD0CjS84MzBi
А чтобы добавить немного азарта — среди подписавшихся разыграют:
🥇 iPhone Air;
🥈 Яндекс Станцию Лайт 2;
🥉 HUAWEI Freebuds 5.
Как участвовать:
1. Подпишись на папку: https://t.me/addlist/yXbxnD0CjS84MzBi
2. Подтверди участие в боте
🗓 Итоги — 25 октября.
новые инструменты, новые фреймворки, новые ИИ-решения — а времени разбираться во всём этом меньше, чем когда-либо.
При этом базовые задачи у всех одинаковые: держать процессы под контролем, следить за качеством, закрывать акты день в день и не терять фокус.
В итоге несколько авторов digital-каналов решили объединиться и собрать всё полезное в одну папку — «Документы для тех, кто в digital»
– Система мотивации сотрудников в диджитал на 2026 год,
– 4 шаблона основых документов любого ИТ проекта,
– Топ-6 промптов для создания контента,
– Шаблоны отчётов, которые помогают удерживать клиента,
– Чек-лист по GEO оптимизации сайта и контента.
Сохранив единожды папку «Документы для тех, кто в digital», вы сможете спокойно пройтись по всем каналам и скачать множество авторских документов, которые точно пригодятся в работе.
📂 Ссылка на папку: https://t.me/addlist/yXbxnD0CjS84MzBi
А чтобы добавить немного азарта — среди подписавшихся разыграют:
🥇 iPhone Air;
🥈 Яндекс Станцию Лайт 2;
🥉 HUAWEI Freebuds 5.
Как участвовать:
1. Подпишись на папку: https://t.me/addlist/yXbxnD0CjS84MzBi
2. Подтверди участие в боте
🗓 Итоги — 25 октября.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
⚙️ std::monostate
std::monostate из заголовка используется как «пустой» тип внутри std::variant. Это полезно для добавления незначимого состояния, которое можно обработать отдельно.
👩💻
@quizcpp
std::monostate из заголовка используется как «пустой» тип внутри std::variant. Это полезно для добавления незначимого состояния, которое можно обработать отдельно.
👩💻
@quizcpp
Готовы с нуля создавать телекоммуникационные решения для беспроводных мобильных сетей и сопутствующих услуг? 🧑💻
Отправляйте резюме до 19 октября и присоединяйтесь к команде YADRO Телеком!
Как получить оффер за 3 дня? Листайте карточки выше — все подробности там!
💙 Оставляйте заявку — мы ждём именно вас!
Отправляйте резюме до 19 октября и присоединяйтесь к команде YADRO Телеком!
Как получить оффер за 3 дня? Листайте карточки выше — все подробности там!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Вопрос на собеседовании
Что такое Placement new в C++ и как оно используется?
Ответ ⬇️
Placement new — это форма оператора new, которая позволяет разместить объект в заранее выделенной области памяти. Вместо выделения памяти на куче, как это делает обычный new, placement new создаёт объект в памяти, адрес которой передаётся в качестве аргумента.
Это используется для более точного контроля над памятью, например, в реализациях кастомных аллокаторов, пулах памяти или для повышения производительности в системах с ограниченными ресурсами.
Пример использования ⚙️
#include
#include // Для placement new
int main() {
alignas(alignof(int)) char buffer[sizeof(int)]; // Буфер для хранения объекта
int* ptr = new (buffer) int(42); // Размещение объекта в buffer
std::cout
@quizcpp
Что такое Placement new в C++ и как оно используется?
Ответ ⬇️
Placement new — это форма оператора new, которая позволяет разместить объект в заранее выделенной области памяти. Вместо выделения памяти на куче, как это делает обычный new, placement new создаёт объект в памяти, адрес которой передаётся в качестве аргумента.
Это используется для более точного контроля над памятью, например, в реализациях кастомных аллокаторов, пулах памяти или для повышения производительности в системах с ограниченными ресурсами.
Пример использования ⚙️
#include
#include // Для placement new
int main() {
alignas(alignof(int)) char buffer[sizeof(int)]; // Буфер для хранения объекта
int* ptr = new (buffer) int(42); // Размещение объекта в buffer
std::cout
@quizcpp