🎯 Ошибки в коде на C++ — враг номер один? Мы научим их побеждать!
Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое.
Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас.
🗓 Урок пройдёт 12 февраля в 20:00 мск.
👉 Регистрируйтесь сейчас и получите скидку на большое обучение на курсе «C++ Developer. Professional»: https://vk.cc/cIfoXL
Приходите на открытый урок «Отладка в C++: место в жизненном цикле разработки». Разберём работу с GDB, поиск утечек памяти, неопределённое поведение и многое другое.
Хотите писать код, который работает без сюрпризов? Мы покажем, как использовать отладку, чтобы ошибки боялись вас.
🗓 Урок пройдёт 12 февраля в 20:00 мск.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Constexpr
— компилируем код на этапе сборки Сегодня хотел еще поговорть про
constexpr
и как он помогает делать код быстрее за счёт вычислений на этапе компиляции. Что делает
constexpr
? Если функция объявлена с
constexpr
, то компилятор попытается выполнить её во время компиляции, если это возможно. Простой пример:
constexpr int square(int x) {
return x * x;
}
Теперь, если мы напишем:
int val = square(5);
То компилятор подставит
25
прямо в код, и вычисление не будет выполняться во время выполнения программы! Более сложный пример:
Представьте, что у нас есть факториал:
constexpr int factorial(int n) {
return (n <= 1) ? 1 : (n * factorial(n - 1));
}
Теперь вызов
factorial(5)
будет заменён на 120
ещё до запуска программы. 📌 Итог:
constexpr
помогает убирать лишние вычисления из рантайма, делая код быстрее. А вы используете
constexpr
? Делитесь своими кейсами! 🚀 #cpp #programming
👉 @cpp_lib
🔥 Почему в C++ стоит использовать
Раньше динамические массивы создавали так:
Но это опасно! Почему?
📌 Минусы
❌ Нужно вручную управлять памятью.
❌ Легко забыть
❌ Нет удобных методов работы с массивом.
📌 Преимущества
✅ Автоматически управляет памятью.
✅ Имеет удобные методы (`push_back`,
✅ Совместим с алгоритмами STL.
Вот как лучше:
А вы уже перешли на
#cpp #programming
👉 @cpp_lib
std::vector
, а не new[]
? Раньше динамические массивы создавали так:
int* arr = new int[100];
delete[] arr;
Но это опасно! Почему?
📌 Минусы
new[]
и delete[]
: ❌ Нужно вручную управлять памятью.
❌ Легко забыть
delete[]
, вызвав утечки. ❌ Нет удобных методов работы с массивом.
📌 Преимущества
std::vector
: ✅ Автоматически управляет памятью.
✅ Имеет удобные методы (`push_back`,
size
, `resize`). ✅ Совместим с алгоритмами STL.
Вот как лучше:
std::vector<int> arr(100);
А вы уже перешли на
std::vector
? #cpp #programming
👉 @cpp_lib
⚡ Как избежать утечек памяти в C?
В C нет
📌 Основные правила:
1️⃣ Всегда проверяйте
2️⃣ Освобождайте память
3️⃣ Используйте инструменты типа Valgrind для проверки утечек.
Какой ваш любимый инструмент для поиска утечек памяти?
#cpp #programming
👉 @cpp_lib
В C нет
std::vector
, а значит, памятью нужно управлять вручную. Как не допустить утечек?📌 Основные правила:
1️⃣ Всегда проверяйте
malloc
:
int* ptr = malloc(10 * sizeof(int));
if (!ptr) { perror("malloc failed"); exit(1); }
2️⃣ Освобождайте память
free()
, когда она больше не нужна. 3️⃣ Используйте инструменты типа Valgrind для проверки утечек.
Какой ваш любимый инструмент для поиска утечек памяти?
#cpp #programming
👉 @cpp_lib
Media is too big
VIEW IN TELEGRAM
Парсим С++
В этом вебинаре мы обсудили грамматические конструкции в С++ и как они работают. Мы поговорили о разных видах парсеров и о том, почему С++ сложно парсить. Мы также поделились некоторыми хитростями, позволяющими избежать чрезмерного замедления.
источник
#cpp #programming
👉 @cpp_lib
В этом вебинаре мы обсудили грамматические конструкции в С++ и как они работают. Мы поговорили о разных видах парсеров и о том, почему С++ сложно парсить. Мы также поделились некоторыми хитростями, позволяющими избежать чрезмерного замедления.
источник
#cpp #programming
👉 @cpp_lib
🔥 C++: умные указатели – избавляемся от
Вы все еще вручную освобождаете память? Это уже не актуально! Разбираем умные указатели (
🔹 std::unique_ptr – для объектов, у которых один владелец. Память освобождается автоматически, когда указатель выходит из области видимости:
🔹 std::shared_ptr – для объектов, у которых несколько владельцев. Когда последний
❌ Забудьте про
А вы уже полностью отказались от
#cpp #programming
👉 @cpp_lib
delete
навсегда! Вы все еще вручную освобождаете память? Это уже не актуально! Разбираем умные указатели (
std::unique_ptr
, std::shared_ptr
) и их преимущества. 🔹 std::unique_ptr – для объектов, у которых один владелец. Память освобождается автоматически, когда указатель выходит из области видимости:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << *ptr << std::endl; // 42
}
🔹 std::shared_ptr – для объектов, у которых несколько владельцев. Когда последний
shared_ptr
уничтожается – объект тоже удаляется:
#include <memory>
#include <iostream>
int main() {
std::shared_ptr<int> sp1 = std::make_shared<int>(42);
std::shared_ptr<int> sp2 = sp1; // Теперь два владельца
std::cout << *sp1 << " " << *sp2 << std::endl; // 42 42
}
❌ Забудьте про
new
и delete
, используйте std::make_unique
и std::make_shared
. Это избавит вас от утечек памяти. А вы уже полностью отказались от
delete
? Пишите в комментариях! 👇 #cpp #programming
👉 @cpp_lib
Simple Term Colors
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Библиотека C++17 для работы с цветами в терминале. С поддержкой RGB и HSL!
https://github.com/illyigan/simple_term_colors
#cpp #programming
👉 @cpp_lib
Многопоточное программирование на C
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков. Потоков может быть как несколько так и один. То есть один процесс выполняет несколько действий одновременно. Многопоток нужен в основном для оптимизации использования ресурсов, для программирования интерфейсов - как упомянул раннее выполнение нескольких действийй одновременно. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Не будем тянуть, а перейдем к делу.
Тут я написал небольшое приложение которое создает поток и выводит с его помощью числа от одного до 10 с небольшой задержкой.
https://habr.com/ru/articles/881444/
#cpp #programming
👉 @cpp_lib
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков. Потоков может быть как несколько так и один. То есть один процесс выполняет несколько действий одновременно. Многопоток нужен в основном для оптимизации использования ресурсов, для программирования интерфейсов - как упомянул раннее выполнение нескольких действийй одновременно. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Не будем тянуть, а перейдем к делу.
Тут я написал небольшое приложение которое создает поток и выводит с его помощью числа от одного до 10 с небольшой задержкой.
#include <gtk-4.0/gtk/gtk.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
static void *thread_function(void *data) {
for (int i = 1; i <= 10; i++) {
printf("Thread: %d\n", i);
sleep(1);
}
return NULL;
}
static void on_button_clicked(GtkWidget *widget, gpointer data) {
pthread_t thread;
if (pthread_create(&thread, NULL, thread_function, NULL) != 0) {
g_print("Ошибка создания потока\n");
}
pthread_detach(thread);
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc, &argv);
window = gtk_window_new();
gtk_window_set_title(GTK_WINDOW(window), "Многопоточная программа");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
button = gtk_button_new_with_label("Запустить поток");
g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);
gtk_window_set_child(GTK_WINDOW(window), button);
gtk_widget_show(window);
gtk_main();
return 0;
}
//gcc threading.c -o thread_gui.o -lpthread Надо было добавить чтобы выводило и номер потока но что-то до меня не много не дошлоНадо было добавить чтобы выводило и номер потока но что-то до меня не много не дошло
https://habr.com/ru/articles/881444/
#cpp #programming
👉 @cpp_lib
Грязные трюки C++ из userver и Boost
Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и утилит на C++.
Когда мы пишем какой‑то код для userver и для таких сложных проектов, как Boost, периодически мы сталкиваемся с нестандартными проблемами. И эти нестандартные проблемы требуют нестандартных решений. Вот о таких решениях мы сегодня и поговорим.
А именно:
- Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное.
- Залезем ещё глубже под капот исключений и сделаем их ещё быстрее.
- Сделаем висячую ссылку на невалидный объект, и всё будет хорошо.
- А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.
https://habr.com/ru/companies/yandex/articles/852244
#cpp #programming
👉 @cpp_lib
Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и утилит на C++.
Когда мы пишем какой‑то код для userver и для таких сложных проектов, как Boost, периодически мы сталкиваемся с нестандартными проблемами. И эти нестандартные проблемы требуют нестандартных решений. Вот о таких решениях мы сегодня и поговорим.
А именно:
- Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное.
- Залезем ещё глубже под капот исключений и сделаем их ещё быстрее.
- Сделаем висячую ссылку на невалидный объект, и всё будет хорошо.
- А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.
https://habr.com/ru/companies/yandex/articles/852244
#cpp #programming
👉 @cpp_lib
⚡️Кросс-платформа — твой новый шаг в развитии iOS!
Ты знаешь, как делать приложения для iOS. А теперь представь, что один и тот же код может работать и на iOS, и на Android. Пора узнать, как реализовать это с помощью KMP?
На открытом вебинаре 19 февраля в 20:00 мск ты узнаешь:
- Что такое кросс-платформенная разработка и почему она — будущее;
- Как сделать iOS-приложение мультиплатформенным;
- Как использовать актуальные инструменты Compose Multiplatform.
Зарегистрируйся на открытый урок в преддверие старта курса «iOS Developer»! Все участники получат скидку на обучение. Встречаемся 19 февраля в 20:00 мск.
👉Регистрируйтесь: https://vk.cc/cIGAjd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Ты знаешь, как делать приложения для iOS. А теперь представь, что один и тот же код может работать и на iOS, и на Android. Пора узнать, как реализовать это с помощью KMP?
На открытом вебинаре 19 февраля в 20:00 мск ты узнаешь:
- Что такое кросс-платформенная разработка и почему она — будущее;
- Как сделать iOS-приложение мультиплатформенным;
- Как использовать актуальные инструменты Compose Multiplatform.
Зарегистрируйся на открытый урок в преддверие старта курса «iOS Developer»! Все участники получат скидку на обучение. Встречаемся 19 февраля в 20:00 мск.
👉Регистрируйтесь: https://vk.cc/cIGAjd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 Как правильно сравнивать
Доброй ночи! Давайте разберём важную тему – сравнение
✅ Способы сравнения строк
1️⃣ Оператор
Если вам нужно проверить точное совпадение строк:
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
Если нужно получить порядок строк в алфавитном сравнении:
🔹
-
-
-
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
✅
🚀 Итоги
✔ Используйте
✔
✔ Для регистра –
✔ Для подстрок –
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib
std::string
в C++? Доброй ночи! Давайте разберём важную тему – сравнение
std::string
в C++. Многие думают, что это просто (==
и всё), но есть нюансы! Давайте разберёмся. ✅ Способы сравнения строк
1️⃣ Оператор
==
Если вам нужно проверить точное совпадение строк:
std::string str1 = "hello";
std::string str2 = "hello";
if (str1 == str2) {
std::cout << "Строки равны!\n";
}
Этот метод безопасен, читабелен и работает быстро.
2️⃣ Функция
compare()
Если нужно получить порядок строк в алфавитном сравнении:
std::string str1 = "apple";
std::string str2 = "banana";
if (str1.compare(str2) < 0) {
std::cout << "apple идет перед banana\n";
}
🔹
compare()
возвращает: -
0
, если строки равны -
< 0
, если str1
меньше str2
-
> 0
, если str1
больше str2
3️⃣ Сравнение без учета регистра
В C++ нет встроенного метода, но можно использовать
std::transform
:
#include <algorithm>
#include <cctype>
#include <string>
bool caseInsensitiveCompare(const std::string& a, const std::string& b) {
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
[](char c1, char c2) { return std::tolower(c1) == std::tolower(c2); });
}
std::string str1 = "Hello";
std::string str2 = "hello";
if (caseInsensitiveCompare(str1, str2)) {
std::cout << "Строки равны без учета регистра!\n";
}
4️⃣ Сравнение подстрок
Если нужно проверить, начинается ли строка с подстроки:
std::string text = "hello world";
std::string prefix = "hello";
if (text.rfind(prefix, 0) == 0) {
std::cout << "Строка начинается с 'hello'!\n";
}
✅
rfind(prefix, 0) == 0
проверяет, что prefix
стоит в начале строки.🚀 Итоги
✔ Используйте
==
для простого сравнения ✔
compare()
– если важно узнать порядок ✔ Для регистра –
std::tolower()
✔ Для подстрок –
rfind()
Какой метод вы чаще используете? Делитесь в комментариях!
#cpp #programming
👉 @cpp_lib
Что такое TCP Server Project в C++?
💬 TCP Server Project — это проект, который реализует сервер для обмена данными по протоколу TCP (Transmission Control Protocol). Такой сервер позволяет клиентам подключаться к нему, отправлять запросы и получать ответы через надёжное соединение.
На практике TCP-сервер в C++ создаётся с помощью сокетов (например, используя Berkeley sockets на Linux или Winsock на Windows).
Процесс обычно включает:
• Создание сокета — создаётся дескриптор для коммуникации.
• Привязка к порту (bind) — сервер привязывается к определённому порту на хосте.
• Прослушивание соединений (listen) — сервер ожидает входящие подключения.
• Принятие соединений (accept) — сервер принимает запросы от клиентов.
• Обмен данными — сервер и клиент обмениваются сообщениями через соединение.
📌 Пример применения: чаты, игровые серверы, веб-серверы и любые приложения, требующие стабильного соединения с гарантией доставки данных.
#cpp #programming
👉 @cpp_lib
💬 TCP Server Project — это проект, который реализует сервер для обмена данными по протоколу TCP (Transmission Control Protocol). Такой сервер позволяет клиентам подключаться к нему, отправлять запросы и получать ответы через надёжное соединение.
На практике TCP-сервер в C++ создаётся с помощью сокетов (например, используя Berkeley sockets на Linux или Winsock на Windows).
Процесс обычно включает:
• Создание сокета — создаётся дескриптор для коммуникации.
• Привязка к порту (bind) — сервер привязывается к определённому порту на хосте.
• Прослушивание соединений (listen) — сервер ожидает входящие подключения.
• Принятие соединений (accept) — сервер принимает запросы от клиентов.
• Обмен данными — сервер и клиент обмениваются сообщениями через соединение.
📌 Пример применения: чаты, игровые серверы, веб-серверы и любые приложения, требующие стабильного соединения с гарантией доставки данных.
#cpp #programming
👉 @cpp_lib
🦾Хардкорный тест по языку С++🦾
📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «C++ Developer. Professional» от OTUS.
Сможете сдать - пройдете на курс по спеццене!
💻 В программе курса — все актуальные инструменты, необходимые Middle разработчику на C++. Возможна рассрочка.
🎫 Курс можно приобрести в рассрочку
➡️ Пройти тест и забрать welcome-скидку: https://vk.cc/cIJY4K
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «C++ Developer. Professional» от OTUS.
Сможете сдать - пройдете на курс по спеццене!
💻 В программе курса — все актуальные инструменты, необходимые Middle разработчику на C++. Возможна рассрочка.
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Оптимизация кода: стоит ли всегда инлайнить функции?
Привет, сегодня поговорим о inline функциях в C++. Часто вижу, как новички (да и не только) злоупотребляют этим ключевым словом. Давайте разберемся, стоит ли всегда использовать
🔎 Что делает
Когда вы помечаете функцию как
🔥 Когда
✅ Очень короткие функции (1-2 строчки). Например:
✅ Геттеры и сеттеры в классах, если они простые.
✅ Функции-хелперы в заголовочных файлах (например, в `namespace`-ах).
⚠️ Когда
❌ Большие функции. Раздувает бинарник, увеличивает время компиляции.
❌ Часто изменяемый код. Так как `inline`-функции вставляются в код, изменение их логики требует перекомпиляции всех файлов, где они были вызваны.
❌ Чрезмерное использование. Вставка слишком многих `inline`-функций может снизить эффективность процессорного кеша, что приведет к ухудшению производительности.
🎯 Альтернатива:
В C++11 появился
Если можете сделать функцию
🤔 Итог
Как вы используете
#cpp #programming
👉 @cpp_lib
Привет, сегодня поговорим о inline функциях в C++. Часто вижу, как новички (да и не только) злоупотребляют этим ключевым словом. Давайте разберемся, стоит ли всегда использовать
inline
для оптимизации кода.🔎 Что делает
inline
?Когда вы помечаете функцию как
inline
, компилятор может (но не обязан) заменить вызовы этой функции её телом, чтобы избежать накладных расходов на вызов.🔥 Когда
inline
полезен?✅ Очень короткие функции (1-2 строчки). Например:
inline int square(int x) { return x * x; }
✅ Геттеры и сеттеры в классах, если они простые.
✅ Функции-хелперы в заголовочных файлах (например, в `namespace`-ах).
⚠️ Когда
inline
во вред?❌ Большие функции. Раздувает бинарник, увеличивает время компиляции.
❌ Часто изменяемый код. Так как `inline`-функции вставляются в код, изменение их логики требует перекомпиляции всех файлов, где они были вызваны.
❌ Чрезмерное использование. Вставка слишком многих `inline`-функций может снизить эффективность процессорного кеша, что приведет к ухудшению производительности.
🎯 Альтернатива:
constexpr
!В C++11 появился
constexpr
, который не только инлайнит, но и выполняет вычисления на этапе компиляции:
constexpr int cube(int x) { return x * x * x; }
Если можете сделать функцию
constexpr
— делайте, это лучше, чем просто inline
!🤔 Итог
inline
— мощный инструмент, но применять его стоит с умом. Лучше доверять компилятору и включить оптимизацию -O2
или -O3
, чем разбрасываться inline
без разбора.Как вы используете
inline
в своих проектах? Пишите в комментариях! 💬🔥#cpp #programming
👉 @cpp_lib
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Уменьшаем размер исполняемого файла в C++
Всем добрый вечер! Хочу поделиться парой трюков, которые помогут уменьшить размер исполняемого файла вашей программы на C++. Это полезно, если вы пишете под встраиваемые системы, создаёте утилиты или просто хотите более компактный бинарник.
🔹 1. Отключаем отладочную информацию
Компиляторы по умолчанию добавляют отладочные символы в бинарник. Их можно убрать флагами:
Флаг
🔹 2. Оптимизируем код
Используйте
Флаг
🔹 3. Статическая или динамическая линковка?
Если в системе уже есть нужные библиотеки, используйте динамическую линковку (
Но иногда статическая линковка (флаг
🔹 4. Убираем ненужные зависимости
Можно использовать
А ещё, если пишете на C++, то не забывайте про
🔹 5. Убираем RTTI и исключения
Если не используете
Это существенно уменьшит размер!
#cpp #programming
👉 @cpp_lib
Всем добрый вечер! Хочу поделиться парой трюков, которые помогут уменьшить размер исполняемого файла вашей программы на C++. Это полезно, если вы пишете под встраиваемые системы, создаёте утилиты или просто хотите более компактный бинарник.
🔹 1. Отключаем отладочную информацию
Компиляторы по умолчанию добавляют отладочные символы в бинарник. Их можно убрать флагами:
g++ -o my_program my_program.cpp -O2 -s
Флаг
-s
удаляет все отладочные символы. 🔹 2. Оптимизируем код
Используйте
-O2
или -Os
, чтобы компилятор оптимизировал код для уменьшения размера:
g++ -o my_program my_program.cpp -Os
Флаг
-Os
специально оптимизирует код для минимального размера. 🔹 3. Статическая или динамическая линковка?
Если в системе уже есть нужные библиотеки, используйте динамическую линковку (
-shared
для .so в Linux, /MD
в MSVC). Но иногда статическая линковка (флаг
-static
) позволяет избавиться от лишних зависимостей. 🔹 4. Убираем ненужные зависимости
Можно использовать
strip
, чтобы дополнительно очистить бинарник:
strip my_program
А ещё, если пишете на C++, то не забывайте про
-ffunction-sections -fdata-sections
и --gc-sections
, чтобы убрать неиспользуемый код. 🔹 5. Убираем RTTI и исключения
Если не используете
dynamic_cast
и исключения, отключите их:
g++ -o my_program my_program.cpp -Os -fno-rtti -fno-exceptions
Это существенно уменьшит размер!
#cpp #programming
👉 @cpp_lib
C++26 — встреча ISO в Хагенберге
В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++.
В этот раз прорабатывались следующие большие темы:
Constexpr, ещё больше constexpr
Безопасность, контракты,
https://habr.com/ru/companies/yandex/articles/882518/
#cpp #programming
👉 @cpp_lib
В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++.
В этот раз прорабатывались следующие большие темы:
std::hive
Constexpr, ещё больше constexpr
Безопасность, контракты,
hardening
, профили, UB
и std::launder
Relocate
#embed
https://habr.com/ru/companies/yandex/articles/882518/
#cpp #programming
👉 @cpp_lib
✅ Пишете код на C, но как только дело доходит до структур и массивов — начинается хаос?
Указатели путаются, память ведет себя странно, а программы работают не так, как задумано. Еще немного — и кажется, что проще уйти в Python.
Но ведь C — основа программирования, а низкоуровневые знания делают из программиста профессионала.
Представьте, что вы можете уверенно работать со структурами, оптимизировать код и писать эффективные приложения.
⏺ На открытом вебинаре 27 февраля в 20:00 мск «Структуры и массивы Си в действии: Пишем менеджер библиотеки» мы разберем работу со структурами и массивами в C на практике: создадим систему учета книг, напишем код без классов и научимся грамотно управлять памятью.
Регистрируйтесь, если хотите перестать бояться указателей и разобраться в структурном программировании на C. Бонус — скидка на большое обучение «Программист С» для участников урока.
➡️ Регистрация открыта: https://vk.cc/cINX2T
Указатели путаются, память ведет себя странно, а программы работают не так, как задумано. Еще немного — и кажется, что проще уйти в Python.
Но ведь C — основа программирования, а низкоуровневые знания делают из программиста профессионала.
Представьте, что вы можете уверенно работать со структурами, оптимизировать код и писать эффективные приложения.
Регистрируйтесь, если хотите перестать бояться указателей и разобраться в структурном программировании на C. Бонус — скидка на большое обучение «Программист С» для участников урока.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Оптимизация кода: std::string_view вместо std::string
Привет, друзья! Сегодня хочу рассказать про std::string_view — полезный инструмент, который может значительно ускорить работу с строками в C++. Многие из вас, вероятно, используют std::string, но не всегда это лучший выбор.
❓ Что такое std::string_view?
Это некопируемая, легковесная оболочка над строковыми данными. Она просто хранит указатель на начало строки и её длину, не создавая копии. Использование std::string_view вместо std::string позволяет избежать ненужных аллокаций памяти и ускорить код.
🔥 Пример использования:
🛠 Когда использовать?
✅ При передаче строк в функции, если их не нужно модифицировать.
✅ Для работы с подстроками (в отличие от
✅ Для обработки строк без создания динамических объектов.
⚠️ Важно помнить:
- std::string_view не владеет данными, поэтому нельзя использовать его для длительного хранения указателей на временные строки.
- Нужно быть осторожным с объектами, чей срок жизни может закончиться, пока
🚀 Итог:
Использование
А вы уже используете
#cpp #programming
👉 @cpp_lib
Привет, друзья! Сегодня хочу рассказать про std::string_view — полезный инструмент, который может значительно ускорить работу с строками в C++. Многие из вас, вероятно, используют std::string, но не всегда это лучший выбор.
❓ Что такое std::string_view?
Это некопируемая, легковесная оболочка над строковыми данными. Она просто хранит указатель на начало строки и её длину, не создавая копии. Использование std::string_view вместо std::string позволяет избежать ненужных аллокаций памяти и ускорить код.
🔥 Пример использования:
#include <iostream>
#include <string_view>
void print(std::string_view str) { // Без лишнего копирования
std::cout << str << '\n';
}
int main() {
std::string s = "Hello, world!";
print(s); // Можно передавать std::string
print("Hi there"); // Можно передавать строковый литерал
}
🛠 Когда использовать?
✅ При передаче строк в функции, если их не нужно модифицировать.
✅ Для работы с подстроками (в отличие от
std::string::substr
, который делает копию). ✅ Для обработки строк без создания динамических объектов.
⚠️ Важно помнить:
- std::string_view не владеет данными, поэтому нельзя использовать его для длительного хранения указателей на временные строки.
- Нужно быть осторожным с объектами, чей срок жизни может закончиться, пока
std::string_view
ещё используется.🚀 Итог:
Использование
std::string_view
вместо const std::string&
может ускорить работу с текстовыми данными и снизить нагрузку на аллокатор. Если не нужно изменять строку — это отличный выбор! А вы уже используете
std::string_view
в своих проектах? Делитесь в комментариях! ⬇️#cpp #programming
👉 @cpp_lib
Подборка Telegram каналов для программистов
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus 1С Работа
Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
https://t.me/lifeproger Жизнь программиста. Авторский канал.
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/rabota1C_rus 1С Работа
Системное администрирование 📌
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT