🤖
LifeEXE
Udemy курс UE / C++ PatreonBoostyTelegramYouTube
  • 🤍Welcome
  • 💡Мои курсы
    • 🎮Unreal Engine — полное руководство по разработке на С++
    • 🧪Автоматизация и тестирование в Unreal Engine
    • 🐍Snake game
    • 🔊Metasounds
    • 🏗️Design patterns
    • 🕹️Game Engine hardCORE series
    • 🧠OpenAI
  • 🔗Сообщество
    • Ресуры
    • Поддержать проект
    • Проекты участников сообщества
    • Code review участников сообщества
  • 📚Образовательные ресурсы
    • Книги
      • C++
      • ООП
      • Чистый код
      • Компьютерная графика
      • Алгоритмы и структуры данных
      • Дизайн и проектирование
      • Виртуальная реальность
      • Процедурная графика
      • Функциональное программирование
      • Менеджмент проектов
      • Фундаментальное
      • Тестирование
      • Разное
    • Online
      • Unreal Engine
      • C++
      • Компьютерная графика
      • Чистый код
      • AI
      • Разное
    • Статьи
      • Code / C++
  • 👨‍💻Software
    • IDE
      • VS hotkeys
    • Unreal Engine
    • GIT
    • CI/CD
    • Tools
      • С++
      • Компьютерная графика
      • UI / UX
      • Animations
      • GameDev
      • Unreal Engine
      • Creative coding
      • Sound
      • Документация
      • Статический анализ кода
      • Тестирование
      • Автоматизация
      • Network
      • CV / ML
      • Profiling
      • Fonts
      • UML / diagrams
      • Разное
    • Free assets
  • 💾Code
    • Code style
      • .clang-format
      • .gitignore
      • UE code style
      • Code style проектов LifeEXE
    • C++
      • Const correctness
      • Использование auto
      • Lambda выражения
      • Forward declaration
      • Measure execution time
      • Immediately Invoked Lambda Expression (IILE)
    • Unreal Engine
      • Медленный ли Cast
      • UE_LOGFMT
  • ⁉️FAQ
    • Часто задаваемые вопросы
Powered by GitBook
On this page
  • Минусы auto
  • Плюсы auto
  • Auto в Unreal Engine
  • Резюме

Was this helpful?

  1. Code
  2. C++

Использование auto

Минусы auto

  • Основная проблема auto — это вывод типа. Программист может ошибиться — из-за сложной конструкции auto выведет не тот тип, который он предполагал, но это уже проблема компетенций конкретного разработчика. Ошибки с этим могут быть также и в самых простых ситуациях:

auto Number = 5; // int
auto Number = 5.0; // double
auto Number = 5.0f; // float;

int Number = 5.0; // int
float Number = 5.0; // float
double Number = 5.0f; // double
  • Тип неясен, когда читаете код на GitHub или в редакторе, который не поддерживает интеллектуальные подсказки

Плюсы auto

  • Имена типов C++ могут быть длинными и громоздкими, особенно, когда они связаны с шаблонами, итераторами или пространствами имен. Auto повышает читаемость кода, уменьшает его количество:

TMap<MyOwnType, TArray<MyOtherType>> Object1 = ...

// или

auto Object1 = ...
  • Auto предотвращает переписывание кода (например, если поменялся тип возвращаемого значения у какой-нибудь функции).

// если тип возращаемого значения у данной функции поменяется
TMap<MyOwnType, TArray<MyOtherType>> getMap();

// данные строчки таже придется переписать
TMap<MyOwnType, TArray<MyOtherType>> Map1 = getMap();
TMap<MyOwnType, TArray<MyOtherType>> Map2 = getMap();

// при использовании auto этого делать не придется
auto Map1 = getMap();
auto Map2 = getMap();
  • Все современные IDE поддерживают интеллектуальные подсказки (врядли кто-то пишет код в notepad). Наводите — узнаёте тип.

Auto в Unreal Engine

You shouldn't use auto in C++ code, although a few exceptions are listed below. Always be explicit about the type you're initializing.

  • Вопросы могут возникнуть если вы делаете pull-request в код движка. В процессе ревью вас могут попросить заменить auto на полное имя типа. Но поиск по коду движка выдает 16529 вхождений auto. Вывод очевиден — разработчики движка сами не особо следуют своему правилу:

  • На проектах я использую auto в местах, где нет никаких сложных вычислений типа. Он везде очевиден. Поэтому использование auto более чем уместно.

  • Большинство имен переменных содержит информацию о типе

// очевидно, что это FVector
const auto PlayerLocation = ...

// очевидно, что это AActor*
const auto DamagedActor = HitResult.GetActor();
  • В некоторых конструкциях, например, Cast, тип является параметром шаблона. В данном случае тип очевиден также:

// очевидно, что это ASTUGameModeBase*
const auto GameMode = Cast<ASTUGameModeBase>(GetWorld()->GetAuthGameMode());

// очевидно, что это USTUWeaponComponent*
const auto WeaponComponent = STUUtils::GetSTUPlayerComponent<USTUWeaponComponent>(Pawn);

Резюме

  • Не вижу причин не использовать auto.

  • Делать надо это аккуратно. Если не уверены по поводу типа — пишите явно.

  • Не нравится auto — используете полное имя типа. Это тоже отлично (=

PreviousConst correctnessNextLambda выражения

Last updated 2 years ago

Was this helpful?

Возникло обсуждение по поводу корректности использования auto в контексте данной информации на странице :

Данная страница — это набор рекомендаций по написанию кода. Документом это к сожалению назвать нельзя. Для сравнения рекомендую посмотреть как сделан такой документ у.

Дополнительно про использование auto можно почитать в .

Дополнительная информация имеется в статье Герба Саттера ""

💾
Coding Standard
google
документации google
Almost Always Auto