目錄
- C++基礎型別規范
- 命名規范
- 頭檔案規范
- 字串規范
- 字符集規范
- 錯誤處理規范
- 參考
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尺寸),
- 當需要明確基礎型別尺寸大小(例如需要序列化等功能),應使用可移植的型別,
- 如果代碼中的整型型別大小不是很重要,可直接使用C++的 int 和無符號 int 型別(不同的平臺上的大小可能不同),典型的例子是用于回圈的整型變數i,
個人認為,如果想更簡單明了地選擇型別的話,那么建議在類/結構體的宣告部分(變數/函式回傳值/函式引數等)使用可移植型別,而函式實作里出現的某些無關緊要的臨時變數(例如回圈體的整型變數i)則可以直接使用C++基礎型別,
UCLASS()
class MYPROJECT_API USomething: public UObject{
UPROPERTY()
int32 ID;
UFUNCTION()
uint32 GetValue();
};
uint32 USomething::GetValue(){
uint32 value = https://www.cnblogs.com/KillerAery/p/0;
for(int i = 0; i < vec.size(); ++i){
value += vec[i];
}
return value;
}
命名規范
-
命名(如型別或變數)中的每個單詞需大寫首字母,單詞間通常無下劃線,
例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates,
-
bool變數必須以b為前綴(例如 bPendingDestruction 或 bHasFadedIn),
-
型別名前綴需使用額外的大寫字母,用于區分其和變數命名,
例如:FSkin 為型別名,而 Skin 則是 FSkin 的實體,
型別命名前綴規范如下:
藍圖類別 前綴 繼承自 UObject U 繼承自 AActor A 繼承自 SWidget S 抽象界面類的前綴 I 列舉類的前綴 E 模板類 T 其他多數類均以F為前綴,而部分子系統則以其他字母為前綴,
模板實體化的Typedef不再是模板,并應加上相應前綴,例如:typedef TArray<FMytype> FArrayOfMyTypes;
-
藍圖命名:"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 官方檔案 | 斷言相關規范
參考
- 虛幻引擎4 官方檔案 | 編碼標準
系列其他文章:Aery的UE4 C++開發之旅系列文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6745.html
標籤:其他
