UE Difference
Сравнение деталей кода в Unreal Engine 4.27.2
Data types
int vs int32
Both int32 and int are valid types, so that’s why it compiles, though the size of int is implementation-based. Because of this, int32 is usually used in UE4 code to keep things working cross-platform.
Для обеспечения кросс-платформенной совместимости использetv тип данных int32
, поскольку размер int
может различаться в зависимости от платформы компиляции.
int a; // bad
int32 a; // ok
unsigned char b; // bad
uint8 b; // ok
signed long long int c; // bad
int64 c; // ok
nullptr vs NULL
You should really try to avoid using NULL if possible and instead use nullptr. It’s a lot safer if only because you’re not checking against a number (zero) - and it’s part of the C++ language as of C++11 (which is required by Rocket in any case!)
NULL
просто является альтернативным термином для 0. Однако, для обеспечения безопасности при работе с указателями, используем nullptr
.
int* ptr = NULL; //bad
int* ptr = nullptr; //ok
using, typedef
Для создания синонима длинного типа данных применяй ключевые слова
using
илиtypedef
Используйте
using
илиtypedef
для повышения локальной читаемости кодаВ стандарте C++ 11
using
иtypedef
считаются синонимамиПри выборе между using и typedef, отдайте предпочтение using, так как typedef не всегда поддерживает шаблоны
The alias declaration is compatible with templates, whereas the C style typedef is not.
typedef void (UWeaponWorkbenchAction::*FunctionPtrType)(int32 a); // ok
using FunctionPtrType = void (UWeaponWorkbenchAction::*)(int32 a; // better
define
Избегайте использования #define для определения констант; вместо этого рекомендуется применять constexpr
Использование макросов и подстановка бесконечного числа параметров данных удобны в контексте Unreal Engine 4 с использованием директивы #define
#define NETMODE_WORLD (((GEngine == nullptr) || (GetWorld() == nullptr)) ? TEXT("") \
: (GEngine->GetNetMode(GetWorld()) == NM_Client) ? TEXT("[Client] ") \
: (GEngine->GetNetMode(GetWorld()) == NM_ListenServer) ? TEXT("[ListenServer] ") \
: (GEngine->GetNetMode(GetWorld()) == NM_DedicatedServer) ? TEXT("[DedicatedServer] ") \
: TEXT("[Standalone] "))
#define TRACE(Category, Format, ...) \
{ \
SET_WARN_COLOR(COLOR_CYAN);\
const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \
if (Msg == "") \
{ \
UE_LOG(Category, Log, TEXT("%s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *GetNameSafe(this));\
} \
else \
{ \
UE_LOG(Category, Log, TEXT("%s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *Msg);\
} \
CLEAR_WARN_COLOR();\
}
Last updated