一、命名规范建议:
1、 变量命名时用对应的英文单词,不要用拼音。
2、 变量命名建议用小驼峰式命名法(就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。)
3、 类名、方法名、命名空间建议用大驼峰式命名法(相比小驼峰法,大驼峰法把第一个单词的首字母也大写了,例如:MyFirstName、MyLastName)。
4、 变量命名时尽量不要使用难以理解的数字,除非有必要且加上注释。
5、 指针变量命名前加p。
6、 全局变量命名前加g_,如g_SumCount。
7、 静态变量命名前加s_,如s_Count。
8、 枚举变量和枚举成员变量命名前加En。
9、 类成员变量命名前加m_,如m_data。
10、宏命名使用大写字母加下划线‘_’分隔词义。
11、常量命名以小写“c_”开头。
12、VS中解决方案命名、项目命名时前缀应加上公司缩写或产品缩写。
二、代码排版建议
1、一行代码只做一件事情,如只定义一个变量,或只写一条语句,这样的代码容易阅读,并且方便于写注释。
2、尽可能在定义变量的同时初始化该变量(就近原则),如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误,本建议可以减少隐患。
3、if、for、while、do 等语句自占一行,执行语句不得紧跟其后,不论执行语句有多少都要加{},这样可以防止书写失误。
如这种写法是不建议的:if (!pfs)return;
建议改成:
if (!pfs)
return;
三、注释规范建议:
1、源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等信息。实际中至少要列出作者,这样阅读代码有问题时可以找原作者咨询。
2、函数声明前最好加上注释,内容包括“功能”,“参数”,“返回值”,“设计思想”,“调用函数”,“日期”,“修改记录”等信息。
3、全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
四、编程规范建议:
1、判断指针是否为空用nullptr。
2、用指针调用成员变量或方法前,判断该指针是否为空,防止崩溃。
3、函数参数个数控制在5个以内,多的话考虑封装成结构体。
4、类对象作为函数参数时,考虑加上引用&,避免对象构造和析构,提高效率。能用const &尽量用const &。
5、函数参数是指针时且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
6、类的构造函数优先用初始化列表形式,原因在于某些时候可以提高效率。详细原因自行百度。
7、类中函数不修改任何成员变量时要声明为const函数。
8、如果类构造函数只有一个简单类型参数,需要加explicit 修饰符,防止非预期的隐式类型转换。
9、针对vector容器优先用emplace_back()替代push_back(),因为使用emplace_back() 函数可以减少一次拷贝或移动构造的过程,提升容器插入数据的效率。更详细的原因自行百度。
10、使用STL判断容器是否为空时,如果提供了empty()方法,使用empty(),不要获取容器大小然后判断是否为0。
11、对于多态中的基类的析构函数要声明为虚析构函数。
12、如果使用#define定义常量时,优先替换成用const来定义常量,后者会进行类型检查。
13、确保一个函数只干一件事,函数越短小精悍越好。
14、if中的条件逻辑比较复杂时要简化。
15、使用C++中的STL时,算法调用优先于手写的算法。比如用for_each算法替换手写的for循环等。原因如下:
效率:算法通常比自己写的循环效率更高。
正确性:手学循环比使用算法更容器出错。
可维护性:使用算法的代码通常比手写循环的更加简洁明了。
16、使用C++中的STL时,调用容器的成员函数优先于调用同名的算法。因为成员函数更快且与容器结合更精密。比如关联容器提供了count、find算法,list容器提供了remove、remove_if等。
17、double类型数据进行大小比较时加上容差。
18、考虑用组合代替继承。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)