Ответ
Да, активно внедряю в проекты. C++17 принёс много фич, которые делают код безопаснее, выразительнее и часто эффективнее.
Чаще всего применяю:
-
std::optional<T>— для явного указания на отсутствие значения, заменяет «магические числа» илиnullptr.std::optional<std::string> find_user(int id) { if (auto it = user_map.find(id); it != user_map.end()) return it->second; return std::nullopt; // Явно «не найдено» } // Использование if (auto name = find_user(42)) { std::cout << *name << 'n'; } -
Structured Bindings — для удобной декомпозиции пар, кортежей и структур.
std::map<int, std::string> m; auto [iterator, success] = m.insert({10, "ten"}); for (const auto& [key, value] : m) { /* ... */ } -
std::string_view— для передачи строковых параметров без накладных расходов на копирование или аллокацию.void log_message(std::string_view msg, std::source_location loc = std::source_location::current()) { // Принимает и string, и char*, и string_view без копирования } -
if constexpr— для условной компиляции в шаблонах, что упрощает SFINAE.template<typename T> auto serialize(const T& obj) { if constexpr (std::is_arithmetic_v<T>) { return std::to_string(obj); } else { return obj.serialize(); // Вызывается, только если метод существует } } -
std::filesystem— наконец-то переносимый и удобный API для работы с путями и файлами.
Эти возможности стали стандартными инструментами в моём C++ арсенале, они помогают писать более чистый и надёжный код.