使用const提高函数的健壮性
——MoaKap的学习笔记
1、 使用const修饰函数的参数
1) 使用const修饰函数的输入参数;
用const修饰输出参数就失去了输出参数的意义。
2) 输入参数采用指针传递时,使用const可以防止意外修改该指针;
值传递的参数不要加const
3) 对于非内部数据类型的参数:
Void Func(A a)
效率低:函数内将产生A类型的临时对象用于复制参数a,而临时对象的构造、复制、析构过程都消耗时间。
Void Func(A &a)
引用传递。效率有所提高(引用传递仅借用一下参数的别名,不需要创建临时对象,因此没有构造、析构过程)。
缺点:可能会改变参数a。
Void Func(const A &a)
效率高,同时确保对象不被修改,等效于Void Func(A a)
对于内部数据类型,不需要将“值传递”的方式改成“const引用传递”。
(内部数据类型的参数不存在构造、析构的过程,而且复制也非常快)
2、 用const修饰函数的返回值
“指针传递”方式的函数返回值加const修饰,那么函数的返回值(指针)内容不能被修改,必修赋值给const修饰的同类型指针。
Const char * GetString(void);
Char *str = GetString(); //错误
Const char *str = GetString(); //正确
采用值传递方式的函数返回值没有必要加const修饰。
(函数会把返回值复制到外部临时的存储单元中)
采用“引用传递”作为函数返回值,是为了能够实现链式表达式。
3、 Const成员函数
任何不会修改数据成员的函数都应该声明为const类型。
Calss Stack
{
Public:
Void Push(int elem);
。。。
Int GetCount(void) const;//const成员函数
。。。
}