常量
define C语言的宏常量
const C++,编译器可以对前者进行类型安全检查。
1、在C++中只使用const常量而不使用宏常量,即const常量完全取代宏常量
2、需要对外公开的常量放再头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共头文件中。
3、如果某一常量与其他常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值
例如:
const float RADIUS = 100;
const float DIAMETER = RADIUS * 2;
4、const数据成员的初始化只能在类的构造函数的初始化表中进行
class A
{
A(int size);
const int SIZE;
};
A::A(int size):SIZE(size) //初始化表
{
}
5、类的常量应该用类中的枚举常量来实现。
class A
{
enum{SIZE1 = 100, SIZE2 = 200};//枚举常量
int array[SIZE1 ];
int array[SIZE1 ];
};
枚举常量不会占用对象的存储空间,它们在编译时就被全部求值。
缺点:它隐含的数据类型是整形,其最大值有限,不能表示浮点数。
函数设计
1、不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句。
2、避免函数有太多参数,参数个数控制在5个以内。太多可使用结构。
3、函数名字与返回值类型在语义上不可冲突。
4、有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。
5、return语句不可返回指向“栈内存”的指针或引用,会在函数结束时销毁。
6、如果return返回值是一个对象,要考虑return语句的效率。
例如:
//方式1
return String(s1 + s2);
//方式2
String temp(s1 + s2);
return temp;
方式2比方式1多出temp的初始化和析构过程,方式1直接把临时对象创建并初始化在外部储存单位中,省去了拷贝和析构的花费,提高了效率。
7、函数的功能要单一,不要设计多用途函数。
8、函数体的规模要小,尽量控制在50行以内。
9、尽量避免函数带有“记忆”功能,相同的输入应该产生相同的输出。
10、使用断言assert捕捉不应该发生的非法情况,不要混淆非法情况与错误情况,后者是必然存在的并且一定要处理的。
11、在函数入口处,使用断言检查参数的有效性(合法性)。