assert() крашит процесс. ASSERT_EQ() — нет. Оба проверяют условия. В чём разница на уровне исполнения?Механизм обработки неудачи в
Google Test построен на исключениях и return, а не на abort().⚡️ Как работает assert():
#define assert(expr) \
((expr) ? (void)0 : __assert_fail(...))
При провале вызывается
__assert_fail(), которая делает abort() — немедленное завершение процесса. Никаких cleanup, никаких других тестов.🔍 Как работает ASSERT_EQ:
#define ASSERT_EQ(a, b) \
if (auto result = Compare(a, b); !result) { \
RecordFailure(result); \
return; // <-- ключевое!
}
1. Ошибка записывается в объект теста
2. Выполняется return из функции теста
3. Фреймворк перехватывает управление
4. Следующий тест запускается нормально
В helper-функциях
ASSERT_* использует специальный механизм — макрос генерирует код, который бросает внутреннее исключение Google Test, если тест не void. Это позволяет прервать выполнение даже из вложенных функций.Никогда не используй assert() в production коде, который тестируешь — это помешает тестированию граничных случаев. Используй throw или возвращай error codes.
В тестах всегда используй
ASSERT_*/EXPECT_*, а не assert().📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🥱1
🔧 Guidelines Support Library: как Microsoft проверяет параметры
❗️ Что даёт GSL:
•
•
•
‼️ В debug режиме — runtime проверки, в release — могут быть отключены.
👉 Библиотека
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
GSL — это не просто модная библиотека. Это набор практик от создателей C++, упакованный в код😎#include <gsl/gsl>
// ❌ Традиционная проверка
void setAge(Person& p, int age) {
if (age < 0 || age > 150) {
throw std::invalid_argument("Invalid age");
}
p.age = age;
}
// ✅ GSL: семантика ясна из кода
void setAge(Person& p, int age) {
Expects(age >= 0 && age <= 150); // Precondition
p.age = age;
Ensures(p.age == age); // Postcondition
}
•
Expects() — preconditions (проверка входа)•
Ensures() — postconditions (проверка выхода)•
gsl::not_null<T*> — указатель, который не может быть nullvoid process(gsl::not_null<int*> data) {
// Компилятор гарантирует: data != nullptr
*data = 42; // Безопасно без if
}👉 Библиотека
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🙏2
Разница может быть существенной на больших векторах. Дело в количестве сдвигов памяти.
for (auto it = v.begin(); it != v.end(); ) {
if (*it == target)
it = v.erase(it); // каждый раз сдвиг O(n)
else
++it;
}Если удаляешь k элементов из вектора размера n, получаешь O(k×n) операций копирования. При k≈n/2 это O(n²).
v.erase(std::remove(v.begin(), v.end(), target), v.end());
remove() делает O(n) перемещений, erase() делает один сдвиг хвоста O(n). Итого O(n) вместо O(n²).📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом
Please open Telegram to view this post
VIEW IN TELEGRAM
💯5👍4
🫖 Интересный софт за неделю
• Windows Terminal, Console and Command-Line — современный терминал для Windows от Microsoft с поддержкой вкладок, тем и Unicode
• F´ (fprime) — фреймворк NASA для компонентного бортового ПО встраиваемых систем
• Filament — движок PBR-рендеринга Google для мобильных и веб-приложений
• RunAnywhere SDKs — SDK для локального ИИ на iOS/Android с оптимизацией LLM
• ёRadio — веб-радиоприемник на ESP32 с поддержкой дисплеев и MQTT
• XGBoost — библиотека градиентного бустинга для эффективного ML на больших данных
• MLX — фреймворк Apple ML на Metal для Apple Silicon без CUDA
• BehaviorTree.CPP — библиотека деревьев поведения для робототехники и ИИ на C++
• Piper — нейронная TTS-система для быстрого оффлайн-синтеза речи
• GPT4All — платформа для локального запуска LLM с приватностью и GPU-поддержкой
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
• Windows Terminal, Console and Command-Line — современный терминал для Windows от Microsoft с поддержкой вкладок, тем и Unicode
• F´ (fprime) — фреймворк NASA для компонентного бортового ПО встраиваемых систем
• Filament — движок PBR-рендеринга Google для мобильных и веб-приложений
• RunAnywhere SDKs — SDK для локального ИИ на iOS/Android с оптимизацией LLM
• ёRadio — веб-радиоприемник на ESP32 с поддержкой дисплеев и MQTT
• XGBoost — библиотека градиентного бустинга для эффективного ML на больших данных
• MLX — фреймворк Apple ML на Metal для Apple Silicon без CUDA
• BehaviorTree.CPP — библиотека деревьев поведения для робототехники и ИИ на C++
• Piper — нейронная TTS-система для быстрого оффлайн-синтеза речи
• GPT4All — платформа для локального запуска LLM с приватностью и GPU-поддержкой
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
🥰1😁1
😎 Топ-вакансий для C++ разработчиков за неделю
Разработчик C++ — Удалёнка
C++ Developer (Middle/Senior) — от 2 000 и до 4 000 $ Удалёнка
System С++ Developer (General Components) — от 350 000 ₽ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
Разработчик C++ — Удалёнка
C++ Developer (Middle/Senior) — от 2 000 и до 4 000 $ Удалёнка
System С++ Developer (General Components) — от 350 000 ₽ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
❤1😁1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🔄 Нестандартная карьера: как оформить резюме, если ты свитчер
Нестандартный карьерный трек — это одновременно твое преимущество и главная проблема при поиске работы.
Рассказываем, как оформить резюме свитчера так, чтобы разношерстный опыт выглядел как осознанное развитие, а не метания из стороны в сторону.
🐸 Библиотека программиста
Нестандартный карьерный трек — это одновременно твое преимущество и главная проблема при поиске работы.
Рассказываем, как оформить резюме свитчера так, чтобы разношерстный опыт выглядел как осознанное развитие, а не метания из стороны в сторону.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍4😁2🥱2
Собираем фулл-хаус: 3 курса по цене 1
Хватит выбирать между «полезно», «модно» и «для души». Мы запустили механику, которая позволяет собрать кастомный стек навыков без удара по бюджету: покупаете один курс — два других забираете бесплатно.
Для тех, кто работает с производительностью, мастхэв — алгоритмы и структуры данных. Чтобы проектировать сложные системы грамотно — архитектура и шаблоны проектирования.
Если интересна математическая «начинка» нейросетей — полный набор по AI: от углублённой математики и ML-старта до разработки автономных агентов.
В качестве второго языка для быстрой разработки — обновлённый Python.
Собрать свой пак
Хватит выбирать между «полезно», «модно» и «для души». Мы запустили механику, которая позволяет собрать кастомный стек навыков без удара по бюджету: покупаете один курс — два других забираете бесплатно.
Для тех, кто работает с производительностью, мастхэв — алгоритмы и структуры данных. Чтобы проектировать сложные системы грамотно — архитектура и шаблоны проектирования.
Если интересна математическая «начинка» нейросетей — полный набор по AI: от углублённой математики и ML-старта до разработки автономных агентов.
В качестве второго языка для быстрой разработки — обновлённый Python.
Собрать свой пак
😁2
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
🧩 Выходной челлендж: noexcept или не noexcept?
Многие добавляют noexcept "на глаз". А ты знаешь, где это критично?
Задача: В какие методы нужно добавить noexcept и почему?
Подсказка:один из них критически важен для производительности при работе с контейнерами STL.
💬 Делись своими мыслями! Объясни не только ЧТО добавить, но и ПОЧЕМУ это важно.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
Многие добавляют noexcept "на глаз". А ты знаешь, где это критично?
class DataStore {
std::vector<int> data;
public:
DataStore() = default;
DataStore(DataStore&& other) {
data = std::move(other.data);
}
void add(int value) {
data.push_back(value);
}
};Задача: В какие методы нужно добавить noexcept и почему?
Подсказка:
💬 Делись своими мыслями! Объясни не только ЧТО добавить, но и ПОЧЕМУ это важно.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик
👍3
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Почему assert() убивает тесты, а ASSERT_EQ не трогает другие? — объяснение как работает проверка условий в Google Test
• Guidelines Support Library — библиотека от Microsoft позволяющая удобно проверять
параметры
• Почему v.erase(remove(...)) быстрее цикла с erase()? — удобный и быстрый способ очистки массивов
• Нестандартная карьера: как оформить резюме, если ты свитчер — советы по организации резюме для разноплановых разработчиков
• Интересный софт за неделю — дайджест по софту за неделю
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Интересное:
• Почему assert() убивает тесты, а ASSERT_EQ не трогает другие? — объяснение как работает проверка условий в Google Test
• Guidelines Support Library — библиотека от Microsoft позволяющая удобно проверять
параметры
• Почему v.erase(remove(...)) быстрее цикла с erase()? — удобный и быстрый способ очистки массивов
• Нестандартная карьера: как оформить резюме, если ты свитчер — советы по организации резюме для разноплановых разработчиков
• Интересный софт за неделю — дайджест по софту за неделю
🔹📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак
👍1👏1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Какая функция позволяет узнать, находится ли выполнение в процессе раскрутки стека?
Anonymous Quiz
35%
std::is_unwinding()
11%
std::uncaught_exception()
8%
std::uncaught_exceptions()
8%
std::in_exception()
38%
Такой функции нет