Unreal Engine C++ Course
PatreonBoostyTelegramYoutube
  • О курсе
  • Ссылки
    • Git
    • Visual Studio
    • Unreal Engine
  • Глоссарий
    • Общие понятия
    • Код / C++
      • Const correctness
      • Использование auto
    • Код / Best practices
    • Анимации
    • UI
    • VFX
    • AI
  • Unreal Editor Hotkeys
  • Visual Studio Hotkeys
  • Console commands
  • Проблемы и решения
    • IntelliSense тормозит
    • Проект не компилируется
    • Не вижу репозиторий ShootThemUp
    • Класс не отображается в Solution Explorer
    • Не работает Apply Damage
    • Где взять текстуры интерфейса
    • Нет контекстного меню UE при клике правой кнопкой мыши на файле .uproject
    • Ошибка Unable to start program
  • Вопросы и ответы
    • Зачем вступать в организацию EpicGames на Github
    • Можно ли проходить курс на UE5
    • Как перегенерировать файлы проекта
    • Насколько сильно влияет кол-во инклюдов на работу кода
    • На сколько большие могут быть структуры и таблицы
    • Медленный ли Cast
    • Что такое интерфейсы
    • Как работает код с переопределением GetMaxSpeed
    • Hit Reaction Animation
  • Дополнения к урокам
    • Лекция 065
      • Additive animation при приземлении
      • Блокировка стрельбы при беге
    • Лекция 079
      • Пикап видим после начисления патронов
      • Пикап не подбирается, если боекомплект расходуется в точке респауна пикапа
    • Лекция 089
      • NiagaraSystem не аттачится к дулу
    • Лекция 148
    • Лекция 155
  • Как задавать вопрос
  • Что почитать
  • UE5
  • Automation
    • Форматирование кода
  • VPN
  • 👨‍🎓мои курсы
    • 🧪Автоматизация и тестирование в Unreal Engine
    • 🐍Snake game
  • 🔗lifeexe сообщество
    • Поддержать проект
    • Ресурсы
    • Проекты участников сообщества
    • Code review участников сообщества
Powered by GitBook
On this page
  • Минусы auto
  • Плюсы auto
  • Auto в Unreal Engine
  • Резюме

Was this helpful?

  1. Глоссарий
  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 более чем уместно.

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

// очевидно, что это 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 correctnessNextКод / Best practices

Last updated 3 years ago

Was this helpful?

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

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

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

Coding Standard
google
документации google