🚀 std::unreachable в C++23
Компилятор не всегда понимает, что некоторые участки кода недостижимы. std::unreachable() помогает ему генерировать более оптимальный код.
📋 Пошаговое решение:
1️⃣ Подключите заголовок
2️⃣ Используйте в switch без default
3️⃣ Применяйте в условных блоках
⚠️ Частые ошибки:
❌ Неправильно: Использовать когда код действительно достижим
❌ Неправильно: Забывать про обработку ошибок перед unreachable()
✅ Правильно: Использовать только когда логически уверены в недостижимости
🎯 Практический совет:
std::unreachable() - это контракт с компилятором. Если код всё-таки достигнет этой точки, поведение неопределено. Используйте только когда на 100% уверены.
🎯 Альтернатива:
В старых стандартах используйте
🐸 Библиотека C/C++ разработчика #буст
Компилятор не всегда понимает, что некоторые участки кода недостижимы. std::unreachable() помогает ему генерировать более оптимальный код.
📋 Пошаговое решение:
1️⃣ Подключите заголовок
#include <utility> // C++23
2️⃣ Используйте в switch без default
enum class Color { RED, GREEN, BLUE };
std::string colorToString(Color c) {
switch(c) {
case Color::RED: return "red";
case Color::GREEN: return "green";
case Color::BLUE: return "blue";
}
std::unreachable(); // Говорим компилятору: сюда не попадём!
}3️⃣ Применяйте в условных блоках
int divide(int a, int b) {
if (b != 0) {
return a / b;
}
// Логически сюда не должны попасть
handleError(); // Наша обработка
std::unreachable(); // Оптимизация для компилятора
}⚠️ Частые ошибки:
❌ Неправильно: Использовать когда код действительно достижим
❌ Неправильно: Забывать про обработку ошибок перед unreachable()
✅ Правильно: Использовать только когда логически уверены в недостижимости
🎯 Практический совет:
std::unreachable() - это контракт с компилятором. Если код всё-таки достигнет этой точки, поведение неопределено. Используйте только когда на 100% уверены.
🎯 Альтернатива:
В старых стандартах используйте
__builtin_unreachable() (GCC/Clang) или __assume(false) (MSVC).Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤5
✏️ Промпт дня: Создание юнит-тестов для надёжного кода
Юнит-тесты — это автоматизированные тесты, которые проверяют поведение отдельных частей кода в изоляции. Они помогают обнаруживать ошибки на ранней стадии и значительно упрощают поддержку кода в C++.
☀️ Решение с помощью AI
🧋 Пример трансформации
До:
После:
✏️ Как часто вы пишете юнит-тесты для своего C++ кода?
🐸 Библиотека C/C++ разработчика #буст
Юнит-тесты — это автоматизированные тесты, которые проверяют поведение отдельных частей кода в изоляции. Они помогают обнаруживать ошибки на ранней стадии и значительно упрощают поддержку кода в C++.
☀️ Решение с помощью AI
Please write unit tests for [имя файла и модуля] to ensure its proper functioning
[ВСТАВЬТЕ ВАШ КОД ЗДЕСЬ]
🧋 Пример трансформации
До:
class Calculator {
public:
int add(int a, int b) { return a + b; }
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("Division by zero");
return a / b;
}
};После:
#include <gtest/gtest.h>
TEST(CalculatorTest, AddPositiveNumbers) {
Calculator calc;
EXPECT_EQ(calc.add(2, 3), 5);
}
TEST(CalculatorTest, DivideByZero) {
Calculator calc;
EXPECT_THROW(calc.divide(10, 0), std::invalid_argument);
}
TEST(CalculatorTest, DivideNormalCase) {
Calculator calc;
EXPECT_EQ(calc.divide(10, 2), 5);
}
✏️ Как часто вы пишете юнит-тесты для своего C++ кода?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7❤1👍1