程序的版式:在每个类声明之后,每个函数定义结束之后都要加空行,
逻辑上密切相关的语句之间不加空行,其他地方应该加空行;
代码行:1、一行代码做一件事;
2、 if、for、while、do等语句自占一行,执行语句不得紧跟其后,不论执行多少语句都要加{}
3、尽可能在定义变量的同时初始化该变量
4、关键字之后要留空格。象const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。
5、象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字
6、函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
7、程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
8、 应当将修饰符 * 和& 紧靠变量名 9、注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方;
命名规则:
1、标识符应当直观可以拼读,可望文知义(采用单词或者组合)
2、标识符的长度应当符合“min-length”和“max-information”
3、命名规则尽量与采用的操作系统或开发工具风格一致
4、变量的名字应当使用“名词”或者“形容词+名词”
5、全局函数的名字应当使用“动词”或者“动词+名词”,类的成员函数应当只使用“动词”,被省略的名词就是对象本身。
表达式和基本语句:
1、注意一元运算符 + - * 的优先级高于对应的二元运算符。
2、在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。 3、 不可在for 循环体内修改循环变量,防止for 循环失去控制。 函数设计:
1、参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。
2、参数命名要恰当,顺序要合理。
3、如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
4、如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
5、函数名字与返回值类型在语义上不可冲突。
6、不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。
7、引用的主要功能是传递函数的参数和返回值
内存分配方式有三种:
(1)
从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2)
在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)
从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
释放了内存却继续使用它。
有三种情况:
(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
(2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。