В эфире рубрика выходного дня: Воскресный C++
Numeric limits в стандарте C++ и в Unreal Engine
На Boosty и Patreon расширенная статья с множеством интерактивных примеров в Compiler Explorer
std::numeric_limits
в C++ — это стандартный шаблонный класс, который предоставляет информацию о свойствах числовых типов, например:infinity,
quiet_NaN,
signaling_NaN
и другие.Полная спецификация на cppreference.com
Простейший пример использования:
#include <limits>
#include <print> // C++23
int main()
{
std::println("Max int: {}", std::numeric_limits<int>::max());
std::println("Min double: {}", std::numeric_limits<double>::min());
std::println("Lowest float: {}", std::numeric_limits<float>::lowest());
std::println("Double epsilon: {}", std::numeric_limits<double>::epsilon());
return EXIT_SUCCESS;
}
Ключевые особенности
Безопасность
Вместо «магических чисел» (например,
2147483647
для int
), вы используете std::numeric_limits<int>::max()
. В итоге код становится более читаемым и переносимым (платформонезависимым).Портируемость
int,
float,
double, uint64_t
, а также с пользовательскими числовыми типами, если для них существует специализация шаблона numeric_limits
.Чистота кода
Когда реально нужен
NaN
.В Unreal Engine имеется собственный шаблон
TNumericLimits<T>
— это аналог std::numeric_limits
, реализованный в движке. Заголовочный файл находится по адресу:
Runtime/Core/Public/Limits.h
Применение абсолютно аналогичное, как и в стандартном C++:
#include "Math/NumericLimits.h"
#include "Logging/StructuredLog.h"
DEFINE_LOG_CATEGORY_STATIC(LogNumLimitsTest, All, All);
void NumLimitsTest()
{
const int32 MaxInt = TNumericLimits<int32>::Max();
const int32 MinInt = TNumericLimits<int32>::Min();
const float MaxFloat = TNumericLimits<float>::Max();
const float MinFloat = TNumericLimits<float>::Min();
UE_LOGFMT(LogNumLimitsTest, Display, "Int32: Min={0}, Max={1}", MinInt, MaxInt);
UE_LOGFMT(LogNumLimitsTest, Display, "Float: Min={0}, Max={1}", MinFloat, MaxFloat);
}
std::numeric_limits
— читаем раздел Use of standard libraries. Поэтому можно выбирать любой подходящий под вашу конкретную ситуацию шаблон.Всем чистого кода
Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #code_hints #lifeexeEDU #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #best_practice #numeric_limits #clean_code
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥24 16❤9 2🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
Большой туториал-гайд от Epic Games по физике и оптимизациям Chaos
В основе руководства доклад с прошедшей конференции GDC2025
#chaos #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29 11❤10🦄2❤🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👻8👍6❤2🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
ZibraVDB, инструмент для сжатия и воспроизведения OpenVDB эффектов, теперь доступен бесплатно для инди‑разработчиков. Ваш доход за 12 месяцев не должен превышать
Сжатие позволяет уменьшить файлы до
Плагин на FAB
#zibraVDB #plugin #free #vfx #optimization #openVDB #vdb #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26 11❤4😱1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
Серия видео-туториалов по созданию механики мотобайка в Unreal Engine по ссылке
#tutorial #free #bike #unrealengine #ue5 #gamedev #lifeexecode #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤8 6🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
В хоррор играх бывает кое-что максимально леденящее душу ...
... — когда разработчики-зумеры понятия не имеют, как вставляется 📼 VHS-кассета
#gamedev #lifeexe #lifeexecode #humor
Please open Telegram to view this post
VIEW IN TELEGRAM
😁63 21🔥4😱2😈2🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
#tips #tips_and_tricks #ue_tips #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
❤29🔥11 11👍3
This media is not supported in your browser
VIEW IN TELEGRAM
На #Gamescom2025 был показан новый трейлер атмосферного survival‑хоррора от первой лица
Действие ROUTINE разворачивается на заброшенной лунной базе, стилизованной под ретрофутуризм в духе 80‑х.
#gamedev #games #lifeexe #lifeexecode #coolgame #horror #unrealengine #ue3 #ue4 #ue5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15😱10🦄5🔥4👍2❤🔥1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Новый видео-туториал от инженера Epic Games по использованию GPU-генерации с PCG
Исходники проекта на Github
#pcg #procedural #gpu #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥19 8❤3👍1🦄1
И такое бывает в коде движка
Engine\Source\Runtime\Core\Public\Delegates\MulticastDelegateBase.h
Почему const важен? Читаем по ссылкам
Const serves several purposes which I believe too many programmers ignore. My rule is "everything should always be const unless it can't be". I wish all variables in C++ were const by default.
#пятничное #const #friday #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #meme #humor
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22🔥16❤5🫡1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
Пятничная видео-игра сегодня
Мочилово в заброшенном парк развлечений 🎢
#gamedev #games #lifeexe #lifeexecode #fridaygame #coolgame
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍10❤6🤯1🦄1
Epic Games выкатили ежемесячную подборку бесплатных курсов
#learn #course #tutorial #free #epic #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤6 5👍2⚡1🦄1
В эфире рубрика выходного дня: Воскресный C++
Написал большую статью на тему:
«Asserts в стандарте C++ и в Unreal Engine»
❗️ На Boosty и Patreon полная версия с множеством примеров!
По традиции сначала разбираем как все работает на чистом
C++, а потом смотрим, что происходит в Unreal Engine.
Assertions — это утверждения, проверяющие предположения программиста о корректности кода. Они помогают выявлять ошибки и документировать инварианты.
Инвариант — это условие, которое должно быть истинным всегда в определённом контексте.
Зачем нужны assertions?
Виды assertions
В стандартном C++ основной инструмент для реализации утверждений — это макрос препроцессора
assert
, определенный в заголовочном файле <cassert>
:stderr
и немедленно завершает программу путем вызова функции std::abort()
double div(double numerator, double denominator)
{
assert(denominator != 0.0);
return numerator / denominator;
}
Стандартный макрос
assert
не имеет встроенного параметра для пользовательских сообщений. Однако существуют две распространенные идиомы для добавления диагностики, которая будет выведена в диагностическом сообщении в случае сбоя assert(divisor != 0 && "Divisor cannot be 0");
assert(("Divisor cannot be 0", divisor != 0));
Распространенная ошибка при использовании
assert
— это включение в проверяемое выражение кода с побочными эффектами. Проблема в том, что когда определен макрос
NDEBUG
, все выражение внутри assert
удаляется из кода. Это может привести к тому, что логика программы в отладочной и релизной сборках будет отличаться. assert(InitializeSubsystem());
[[maybe_unused]] const bool bSuccess = InitializeSubsystem();
assert(bSuccess);
Unreal Engine расширяет стандартный макрос
assert
, добавляя дополнительные возможности к рантайм проверкам, Имеются следующие семейства: check
, verify
, ensure
.Семейство
check
является прямым эквивалентом стандартного assert
в Unreal Engine. Сбой check
указывает на критическую ошибку в программе, и выполнение немедленно останавливается void AMyActor::CalculateJumpVelocity(AActor* JumpTarget, FVector& JumpVelocity)
{
check(JumpTarget != nullptr);
}
Остальные макросы данного семейства:
check, checkf, checkSlow, checkfSlow, checkCode, checkNoEntry, checkNoReentry, checkNoRecursion, unimplemented
Следующее семейство макросов является решением проблемы побочных эффектов. Выражение внутри макроса
verify
выполняется всегда, независимо от конфигурации сборки.Полный список макросов:
verify, verifyf, verifySlow
Данное семейство макросов используется для сообщения о нефатальных ошибках. Программа не завершает работу, а отправляет отчет со стеком вызовов в Crash Reporter и продолжает выполнение:
ensure, ensureAlways, ensureMsgf, ensureAlwaysMsgf
static_assert
check
verify
checkSlow
ensure
checkNoEntry
или unimplemented
checkNoRecursion
checkNoReentry
В статье на Boosty и Patreon подробнее про каждый из макросов и static_assert
Всем чистого кода
Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #code_hints #lifeexeEDU #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #best_practice #assert #clean_code
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥38 10👍9❤5🦄1 1
Поздравляю с началом нового учебного года!
Забирайте бесплатный купон на 100 мест на мой курс «Unreal Engine — полное руководство по разработке на С++»
Статистика по курсу на сегодня следующая
Студенты из
Всем спасибо за отзывы и прохождение!
Patreon | Boosty | PayPal
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE
#code #cpp #lifeexeEDU #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #udemy #course #shooter #free #coupon
Please open Telegram to view this post
VIEW IN TELEGRAM
Udemy
Unreal Engine — полное руководство по разработке на С++
Раскройте возможности C++ для разработки игр в Unreal Engine
🔥76❤21 6❤🔥3⚡2🦄1 1
Epic Games опубликовали док с улучшениями редактора материалов, которые появились в Unreal Engine 5.6
Shift
#material #ue_tips #shader #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍19🔥14 6❤4🦄1