代码规范

1、类名首字母大写;用大写字母分隔单词,除单词的首字母外,全部小写;类名中不要出现下划线“_”。

2、属性由成员前缀”m_“属性,属性名采用匈牙利命名规范。

3、方法与函数执行一个任务,因此应当用动词来命名。比方说,DumpDataToFile()就要好于DataFile()。

4、方法名首字母大写;用大写字母分隔单词,除单词的首字母外,全部小写,方法名中不要出现下划线。

5、函数名全部小写,单词之间用下划线分隔。

6、引用变量应在类型前加上r前缀,其后变量名命名规则不变。

7、全用变量应使用g_属性描述,其后变量名命名规则不变。 如:ImLog4c* g_pLogger;

8、静态变量应使用s_属性描述,其后变量名命名规则不变。 如: ImLog4c* s_pLogger;

9、宏命名规则使用大写字母,用下划线分隔单词。

10、"("与前一个关键字之间留一个空格。

11、"("与前函数名之间不需要留一个空格。

12、Return语句尽可能不要用"()" return (a*b^2>100)?(a):(b);

13、QT中每個QObject子類都必須具有Q_OBJECT宏,即使它沒有信號或插槽也是如此,否則qobject_cast將失敗。

14、如果需要包括qplatformdefs.h,請始終將其作為第一個頭文件。

15、避免使用C強制轉換,而建議使用C ++強制轉換(static_cast,const_cast,reinterpret_cast)
原理:reinterpret_cast和C樣式強制轉換都是危險的,但是至少reinterpret_cast不會刪除const修飾符

16、使用構造函數強制轉換簡單類型:int(myFloat)代替(int)myFloat
原理:重構代碼時,編譯器會立即通知您是否強制轉換會很危險。

17、任何具有構造函數或需要運行代碼進行初始化的對像都不能用作庫代碼中的全局對象,因為在運行該構造函數/代碼時(在首次使用時,在庫加載時,在main()之前或之後),它都是未定義的完全沒有)。即使為共享庫定義了初始化程序的執行時間,在插件中移動該代碼或靜態編譯庫時也會遇到麻煩:
static const QString x; // Wrong - 需要運行默認的構造函數以初始化x
static const QString y = “Hello”; // Wrong - 構造函數使用const char *必須運行
QString z; // Wrong
static const int i = foo(); // Wrong - foo()的調用時間未定義,可能根本不會調用
Things you can do:

static const char x[] = “someText”; // Works - 無需運行任何構造函數,x在編譯時設置
static int y = 7; // Works - y 將編譯時設置
static MyStruct s = {1, 2, 3}; // Works - 將被靜態初始化,沒有代碼被运行
static QString *ptr = 0; // 指向對象的指針可以-無需運行任何代碼即可初始化

18、使用Q_GLOBAL_STATIC來創建靜態全局對象:
Q_GLOBAL_STATIC(QString, s)
void foo()
{
s()->append(“moo”);
}

19、編寫QWidget子類時,請始終重新實現event(),即使它為空。這確保了可以在不破壞二進制兼容性的情況下修復小部件。

20、從Qt導出的所有函數必須以’q’或’Q’開頭。使用“符號”自動測試來查找違規。

21、如果在’if’語句中使用lambda,請在新行上啟動lambda,以避免在lambda的左括號和’if’語句的左括號之間造成混淆。

22、將封閉函數調用的右括號和分號與lambda的右括號放在同一行。

23、在第一行上放置捕獲列表,參數列表,返回類型和左括號,在下一行縮進主體,並在新行上關閉右括號。

QT/C++代码规范

相关文章: