Unreal Engine 编码规范

参考官方文档:https://docs.unrealengine.com/5.0/en-US/epic-cplusplus-coding-standardblueprint-debugging-in-unreal-engine/

命名惯例

  1. 首字母大写,并且没有下划线
  2. 类型名前有额外的大写字母前缀,以区别于变量名
    1. T:模板类
    2. I:抽象类
    3. E:枚举类
    4. U:UObject派生类
    5. A:AActor派生类
    6. S:SWidget派生类
    7. b:bool类型变量
    8. F:结构体

  examples:

    

 

 

 可移植的C++代码

  • TCHAR:Character
  • uint8:unsigned bytes
  • int8:signed bytes
  • uint16:unsigned shorts (2 bytes)
  • int16:signed shorts (2 bytes)
  • uint32:unsigned ints (4 bytes)
  • int32:signed ints (4 bytes)
  • uint64:unsigned quad words (8 bytes)
  • int64:signed quad words (8 bytes)
  • PTRINT:可以容纳指针的整数

标准库

  • memcpy():FMemory::Memcpy
  • memset():FMemory::Memset

Const正确性

  • 不打算修改的实参,用const指针或const引用
  • 方法不修改对象,用const
  • 循环不修改容器,用const迭代器

现代C++语法

  • 断言:static_assert
  • override & final ,有效且鼓励使用
  • 使用nullptr而不是NULL
  • 初始化应该明确变量类型,尽量不使用auto

移动构造

  TArray、TMap、TSet、FString,用MoveTemp,相当于std::move。

第三方代码

  修改引擎中使用的库代码时,用 “//@third party code” 做标记,并解释为什么做了更改。

代码格式化

  • 括号不跨行  
  • else | else if 跨行

命名空间

  • 新API放在UE命名空间内,eg. UE::Audio
  • 不面向公共的API应放在Private命名空间内,eg. UE::Audio::Private
  • 不要把using放在全局声明中,unity构建系统会出BUG
  • 宏不能存在于命名空间中,应该以UE_作为前缀

物理依赖

  • 文件名不应加上前缀;eg. Scene.cpp代替UScene.cpp。这使得使用Workspace Whiz或Visual Assist的Open File in Solution这样的工具变得很容易,因为它减少了识别所需文件所需的字母数量。
  • 所有头文件都应该防止使用#pragma once指令进行多次包含。注意,我们使用的所有编译器都只支持一次#pragma。
  • 能使用向前声明而不包含头文件就用
  • 将大函数拆分为逻辑子函数。编译器优化的一个方面是消除常见的子表达式。你的函数越大,编译器就需要做更多的工作来识别它们。这将导致构建时间大大增加。
  • 不要使用太多内联函数,因为即使在不使用它们的文件中,它们也会强制重新构建。内联函数应该只用于简单的访问器,当分析显示这样做有好处时。

Style

  • 始终对字符串文字使用TEXT()宏。如果没有它,从字面量构造FString的代码将导致不希望看到的字符串转换过程。
posted @ 2022-08-04 14:42  番茄玛丽  阅读(183)  评论(0编辑  收藏  举报