1.不可将布尔变量直接与 TRUE,FALSE 或者 1,0 进行比较。
Right temple: bool flag=true; if(flag) {} if(!flag){}
2.不可将浮点变量用“==”或“!=”与任何数字比较。
3. const 与 #define 的比较
C++ 语言可以用 const 来定义常量 , 也可以用 #define 来定义常量 。 但是前者比后
者有更多的优点:
( 1 ) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安
全检查 。 而对后者只进行字符替换 , 没有类型安全检查 , 并且在字符替换可能会
产生意料不到的错误(边际效应 ) 。
( 2 ) 有些集成化的调试工具可以 对 const 常量进行调试 , 但是不能对宏常量进行调试 。
4.优先采用枚举型建立在整个类中恒定的常量。
5. float GetValue(void); // 良好的风格 记得要写 void
6.如果参数是指针,且仅作输入用,则应在类型前加 const ,以防止该指针在函数体内被意外修改。
7.如果输入参数以值传递的方式传递对象 ,则宜改用 “ const & ” 方式来传递,这样可以省去临时对象的
构造和析构过程,从而提高效率。
8.C 语言中 , 凡不加类型说明的函数 , 一律自动按整型处理 。c++不允许的。
9. 不要将正常值和错误标志混在一起返回。
10. 注意事项如下:
( 1 ) return 语句不可返回指向 “ 栈内存 ” 的 “ 指针 ” 或者 “ 引用 ” ,因为该内存在函数体结束时被自动
销毁。例如
char * Func(void)
{
char str [] = “ hello world ” ; // str 的 内存位于栈上
…
return str; // 将导致错误
}
( 2 )要搞清楚返回的究竟是 “ 值 ” 、 “ 指针 ” 还是 “ 引用 ” 。
( 3 )如果函数返回值是一个对象,要考虑 return 语句的效率。例如
return String(s1 + s2);
这是临时对象的语法 , 表示 “ 创建一个临时对象并返回它 ” 。 不要以为它与 “ 先创建
一个局部对象 temp 并返回它的结果 ” 是等价的,如
String temp(s1 + s2);
return temp;
实质不然,上述代码将发生三件事。首先, temp 对象被创建,同时完成初始化;然
后拷贝构造函数把 temp 拷贝到保存返回值的外部存储单元中;最后, temp 在函数结束
时被销毁 ( 调用析构函数 ) 。 然而 “ 创建一个临时对象并返回它 ” 的过程是不同的 , 编译
器直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构的化费,提高了
效率。
类似地,我们不要将
return int(x + y); // 创建一个 临时变量 并返回它
写成
int temp = x + y;
return temp;
由于内部数据类型如 int,float,double 的变量不存在构造函数与析构函数 , 虽然该 “ 临
时变量的语法 ” 不会提高多少效率,但是程序更加简洁易读。
11. 引用的一些规则如下:
1 )引用被创建的同时必须被初始化(指针则可以在任何时候被初始化 ) 。
2 )不能有 NULL 引用,引用必须与合法的存储单元关联(指针则可以是 NULL ) 。
3 )一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象 ) 。
12. 使用 free 或 delete 释放了内存后 , 没有将指针设置为 NULL 。 导致产生 “ 野指针 ” 。