C++高质量编程指南笔记(三)

常量

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、在函数入口处,使用断言检查参数的有效性(合法性)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值