Анализатор обнаружил фрагмент кода, в котором используется доступ к содержимому заведомо инициализированного 'std::optional' с помощью метода 'std::optional::value()'.
Рассмотрим пример:
inline void LuaBlockLoader::loadColorMultiplier( BlockState &state, const sol::table &table) const { std::optional<sol::table> colorMultiplier = table["color_multiplier"]; if (colorMultiplier != std::nullopt) { state.colorMultiplier(gk::Color{ colorMultiplier.value().get<u8>(1), colorMultiplier.value().get<u8>(2), colorMultiplier.value().get<u8>(3), colorMultiplier.value().get<u8>(4) }); } }
Данный метод добавляет накладные расходы на проверку содержимого: если объект класса 'std::optional' равен 'std::nullopt', то будет выброшено исключение 'std::bad_optional_access'. Если известно, что объект инициализирован, можно упростить и ускорить код при помощи перегруженных операторов 'std::optional::operator*' или 'std::optional::operator->':
inline void LuaBlockLoader::loadColorMultiplier( BlockState &state, const sol::table &table) const { std::optional<sol::table> colorMultiplier = table["color_multiplier"]; if (colorMultiplier != std::nullopt) { state.colorMultiplier(gk::Color{ colorMultiplier->get<u8>(1), colorMultiplier->get<u8>(2), colorMultiplier->get<u8>(3), colorMultiplier->get<u8>(4) }); } }