C++中const关键字作用之一,提高函数的健壮性

C++中const关键字作用之一,提高函数的健壮性

使用const提高函数的健壮性:
const可用于修饰函数参数,返回值,函数定义体,被const修饰的东西都受到强制保护,用来预防意外的变动。

const修饰函数的参数:
1、如果参数是用来被输出的,就不能用const修饰参数了。

2、当参数作为输入时,加const修饰可以防止意外改动该参数。
例如:
void StringCopy(char strDestination, const char strSource);
strSource是输入参数,strDestination是输出参数,前者不可以加const修饰,因为函数的目的就是为了改变它,后者需要加const进行保护,防止它被改变。

3、输入参数采用了“值传递”时,函数会自动产生临时变量,参数无需保护,不用加const。
例如:void foo(int value);

4、对于非内部数据类型的参数而言,需要传入值时,让函数产生临时变量,调用构造和析构是消耗时间和资源的,为了提高效率,可以将值传递改变为引用传递,为了保护传入的引用不被改变,需要加上const进行修饰。
例如:
void foo(A value);//值传递,产生临时变量。
void foo(const A &value);//引用传递,无临时变量,const保护。
对于内置数据类型的参数不存在构造,析构的过程,复制也非常快,值传递和引用传递效率相当。

const修饰函数的返回值:
1、返回值为指针时加const修饰,会返回一个const型指针,该指针必须通过const指针接收。
例如:
const char *GetChar(void);
char *str = GetChar(void);//会报错
const char *str = GetChar(void);//正确用法

2、返回值为值时,由于函数会把返回值复制到外部临时的存储单元中,加const毫无用处。
例如:

int GetInt(void);//正常
const int GetInt(void);//多此一举
自定义数据类型同理。

3、返回值为引用时,一般常出现在类的赋值函数中,目的是为了实现链式表达。
例如:

class A
{
A &operator = (const A &other);//赋值函数
};
A a,b,c;
a = b = c;//正常的链式表达
cout<<“1”<<“2”<<“1”<<“2”<<“1”<<“2”<<endl;//正常链式表达

const修饰成员函数:
1、任何不会修改数据成员的函数都应该被声明为const类型。
2、const修饰的函数可有效避免程序员无意间修改数据,或者调用其他非const成员函数的行为,提高程序健壮性。只需要放在函数参数列表后的尾部就可以。
例如:
class A
{
public:
int GetData() const;
private:
int m_data;
};
int A::GetData() const
{
return m_data;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值