目录
1.nullptr空指针
空指针不要用NULL了,都用nullptr
比如:
if (LevelSequence == nullptr)
{
bSuccess = false;
return nullptr;
}
2.基于范围的for循环语法
如下:
TArray<UMovieSceneFolder*> Folders;
LevelSequence->GetMovieScene()->GetRootFolders(Folders);
for (auto& Folder : Folders)
{
if (Folder->GetFolderName() == FolderName)
{
bSuccess = true;
return Folder;
}
}
跟auto自动推导相结合会比较方便
3.inline内联函数
inline可以解决非常量静态成员变量初始化的问题
在UE的FString类中可以找到:FORCEINLINE这个宏(unrealString.h头文件中)
可以看到FORCEINLINE宏的定义如下:
__forceinline的解释为:
可以直观的看到是为了进行非常量静态成员初始化而是用内联函数的(应该吧)
调用FString内函数调用时一向是静态的
比如判断FString是否为空函数
4.override重写函数
就比如创建继承于Actor的C++文件后会自动重写基类的虚函数:
(Actor并不是最终的基类,只是这两个虚函数是在Actor里面定义的)
可以看到Actor.h头文件的定义:
override可以保证父类以上定义下来的虚函数方法能够保持一致,防止出错
如果要将进行父类虚函数方法跑一遍后再运行子类重写函数方法是用的Super函数:
蓝图内是继承父项方法:
5.final阻止子类重写虚函数
同样在Actor.h头文件的定义中可以看到:
如果尝试在子类进行重写是不能通过的;
像override和final同时出现的话通常是由中间派生类继承基类后,阻断后续子类不能修改虚函数
6.强枚举类型
UE的枚举都定义为uint8
用enum+class+枚举名 :uint8这样来定义
比如Actor.h头文件中:
注意用UENUM(BlueprintType)来修饰过后才能从蓝图里找到枚举定义
7.typename优化
Actor.h头文件中: