const使用提高程序健壮性总结

1、用const修饰函数的参数

建议1:如果输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针指向的内存单元,祈祷保护作用。

建议2:对于ADT/UDT的输入参数,应该将“值传递”改为“const &传递”,目的死后提高效率。例如,将 void Func(A a) 改为 void Func(const A &a)。对于基本数据类型的输入参数,不要将“值传递”的方式改为“const & 传递”,否则既达不到提高效率的目的,又让人费解。

2、用const修饰函数的返回值

(1)如果给“指针传递”的函数返回值加const修饰符,函数返回值是一种契约性常量,不能被直接修改,并且该返回值只能被赋值给const修饰的同类型指针(除非强制转换)。

例如:const char * GetString(void);  const char *str = GetString();

(2)如果函数采用“值传递”的方式,在一般情况下有余函数会把返回值拷贝到外部临时存储单元,所以加const修饰没意义。

  但当函数以值传递方式返回ADT/UDT对象、返回引用或者返回指针时,有人会把函数当左值使用,,为防止此种错误发生,可以使用const来修饰返回值。

(3)函数返回值采用“引用传递”的方式不常见,这种方式一般出现在类的赋值函数中,目的是实现链式表达式。



注意:一定要搞清楚究竟是想反悔一个对象的“拷贝”,还是反悔“别名”(即引用),否则程序会出错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值