C++基础类型规范


由于PC、XBOX、PS4等各平台的C++基础类型大小可能不同(实际上绝大部分都是整型类型的大小不同),因此UE4提供了如下可移植基础类型的别名来统一规范类型大小:

  • bool 代表布尔值(不会假定布尔尺寸)。
  • TCHAR 代表字符(不会假定TCHAR尺寸)。
  • uint8 代表无符号字节(1字节)。
  • int8 代表带符号字节(1字节)。
  • uint16 代表无符号“短”字符(2字节)。
  • int16 代表带符号“短”字符(2字节)。
  • uint32 代表无符号整数(4字节)。
  • int32 代表带符号整数(4字节)。
  • uint64 代表无符号“四字”(8字节)。
  • int64 代表带符号“四字”(8字节)。
  • float 代表单精确浮点(4字节)。
  • double 代表双精确浮点(8字节)。
  • PTRINT 代表可能含有指针的整数(不会假定PTRINT尺寸)。
  1. 当需要明确基础类型尺寸大小(例如需要序列化等功能),应使用可移植的类型。
  2. 如果代码中的整型类型大小不是很重要,可直接使用C++的 int 和无符号 int 类型(不同的平台上的大小可能不同),典型的例子是用于循环的整型变量i。

个人认为,如果想更简单明了地选择类型的话,那么建议在类/结构体的声明部分(变量/函数返回值/函数参数等)使用可移植类型,而函数实现里出现的某些无关紧要的临时变量(例如循环体的整型变量i)则可以直接使用C++基础类型。

UCLASS()
class MYPROJECT_API USomething: public UObject{
UPROPERTY()
int32 ID; UFUNCTION()
uint32 GetValue();
}; uint32 USomething::GetValue(){
uint32 value = 0;
for(int i = 0; i < vec.size(); ++i){
value += vec[i];
}
return value;
}

命名规范


  1. 命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。

    例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。

  2. bool变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。

  3. 类型名前缀需使用额外的大写字母,用于区分其和变量命名。

    例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。

    类型命名前缀规范如下:

    蓝图类别 前缀
    继承自 UObject U
    继承自 AActor A
    继承自 SWidget S
    抽象界面类的前缀 I
    枚举类的前缀 E
    模板类 T

    其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。

    模板实例化的Typedef不再是模板,并应加上相应前缀,例如:typedef TArray<FMytype> FArrayOfMyTypes;

  4. 蓝图命名:"BP"+类别缩写+"_"+名字

    例如: BPA_Player

    蓝图类别 前缀
    蓝图Actor BPA_
    蓝图结构 BPS_
    蓝图枚举 BPE_
    蓝图接口 BPI_
    蓝图函数库 BFL_
    蓝图宏库 BML_

头文件规范


  • 确保自己include的头文件不要放在 "XXX.generated.h" 文件下面,因为Unreal Header Tool编译工具默认这个文件就是头文件列表的最后一行了。

字符串规范


  • 在字符串字面量周围使用 TEXT() 宏:若未使用,在文字中构建 FStrings 的代码将导致不理想的字符转换过程。
"Hello World!";			//Not so well

TEXT("Hello World!");	//OK

字符集规范


  • 应将C++代码文件都保存为utf8格式:否则可能会出现在UE4蓝图中调用C++代码(函数、类等)时,出现注释乱码的情况。

错误处理规范


  • 不要使用C++异常机制(try,catch),UE4代码默认是不支持的,推荐使用Assertions。
//example
int i=1;
verify(i==0);

具体UE4提供的断言可查看:虚幻引擎4 官方文档 | 断言相关规范

参考


系列其他文章:Aery的UE4 C++开发之旅系列文章

最新文章

  1. PHP中的date()函数
  2. web开发技术-过滤器
  3. [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
  4. P6 EPPM 16 R1 文档和帮助系统
  5. php多态设计
  6. [转载]《C++0x漫谈》系列之:多线程内存模型
  7. MAC 上升级python为最新版本
  8. js自动判断浏览器类型跳转到手机版
  9. 生意经:研究一下国外SAAS的产品线,比如Salesforce、Netsuite和Zendesk等等(Salesforce斥资7.5亿美元收购云计算字处理应用Quip)
  10. target-action传值
  11. servlet前台中文参数处理
  12. Android基础知识大全(精品)
  13. mybatis一对一嵌套查询
  14. Git使用教程,最详细,最傻瓜,最浅显,真正手把手教
  15. JS对象2
  16. linux网络设备驱动
  17. hdu 4513 最长不下降回文序列【manacher】
  18. Mysql系列一:SQL入门
  19. [转载]MACD 各周期指标状态
  20. PHP开发者的Linux学习之路

热门文章

  1. 使用Git上传文件到github
  2. selenium处理iframe和动作链
  3. 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志
  4. 【nodejs原理&源码赏析(1)】Express中间件系统的基本实现
  5. JavaScript的DOM对象和jQuery对象的对比
  6. react-native 跳转到ios/android 权限设置界面
  7. OA项目之mybatis动态查询
  8. ThreadLocal的进化——InheritableThreadLocal
  9. Vue&amp;Cesium&amp;Ribbon界面: 将桌面GIS搬进浏览器
  10. hdu-4638